Redis简易入门教程

Redis入门

简介

Remote Dictionary Server (Redis)
Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。

它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。

截止到2015年6月27日,发布的最新稳定版本是3.0.2。
3.0版本最大的提升就是redis集群,一个分布式的redis示例具有数据自动分片和高容错性,以及在高负载的情况下的速度提升。

安装、配置

安装

下载路径: http://redis.io/download

安装命令
$ wget http://download.redis.io/releases/redis-3.0.2.tar.gz
$ tar xzf redis-3.0.2.tar.gz
$ cd redis-3.0.2
$ make

启动
$ src/redis-server

客户端
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

配置

redis的配置示例文件在%REDIS_HOME%下的redis.conf
里面包含很多默认配置
使用配置可以这样:$ redis-server /etc/redis/6379.conf

daemonize 如果需要在后台运行,把该项改为yes

pidfile 配置多个pid的地址,默认在/var/run/redis.pid

bind 绑定ip,设置后只接受自该ip的请求

port 监听端口,默认为6379

timeout 设置客户端连接时的超时时间,单位为秒

loglevel 分为4级,debug、verbose、notice、warning

logfile 配置log文件地址

databases 设置数据库的个数,默认使用的数据库为0

save   设置redis进行数据库镜像的频率,保存快照的频率。  
    第一个参数表示多长时间,第二个表示执行多少次写操作。
    在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。

rdbcompression 在进行镜像备份时,是否进行压缩

Dbfilename 镜像备份文件的文件名

Dir 数据库镜像备份的文件放置路径

Slaveof 设置数据库为其他数据库的从数据库 

Masterauth 主数据库连接需要的密码验证

Requirepass 设置登录时需要使用的密码

Maxclients 限制同时连接的客户数量

Maxmemory 设置redis能够使用的最大内存

Appendonly 开启append only模式

appendfsync 设置对appendonly.aof文件同步的频率

vm-enabled 是否虚拟内存的支持

vm-swap-file 设置虚拟内存的交换文件路径

vm-max-memory 设置redis使用的最大物理内存大小

vm-page-size 设置虚拟内存的页大小

vm-pages 设置交换文件的总page数量

vm-max-threads 设置VMIO同时使用的线程数量

glueoutputbuf 把小的输出缓存存放在一起

hash-max-zipmap-entries 设置hash的临界值

activerehashing 重新hash

详情可参考:http://t.cn/8kr3HUw

数据结构及其使用场景

1 string 字符类型
2 hash 散列类型
3 list 列表类型
4 set 集合类型
5 sorted set 有序集合

string 字符串类型

字符串类型是redis最基础的数据类型,是其他4中数据类型的基础。

命令 描述 示例
SET key value 赋值 set foo 5 ==> OK
GET key 取值 get foo ==> "5"
INCR key 递增.键不存在时创建并赋0,否则+1 incr foo ==> 6
DECR key 递减 decr foo ==> 5
INCRBY key num 与incr一样,不过可以指定增加的数值 incrby foo 5 ==> 10
APPEND key value 追加,返回追加后字符串长度 append foo 24 ==> 4
STRLEN key 长度 strlen foo ==> 4
MSET key value[ key value...] 同时设置多个键值 mset key1 1 key2 2 ==> OK
MGET key[ key...] 同时获取多个键值 mget key1 key2 ==>"1" "2"

字符串就介绍到这里了,还有其他命令请自行看官方文档 😂😂😂

hash 散列类型

散列类型是一个键值数据结构,其值只能是字符串,也就是散列数据类型不支持嵌套其他数据类型。

命令 描述 示例
HSET key field value 设置或修改字段值 hset user name frek ==> 1
HGET key field 获取字段值 hget user name ==> "frek"
HMSET key field value[ field value..] 同时设置多个字段 hmset user name frek age 18 ==> OK
HMGET key field[ field..] 同时获取多个字段值 hmget user name age ==> "frek" "18"
HGETALL key 获取键中所有字段和值 hgetall user ==> "name" "frek" "age" "18"
HEXISTS key field 判断字段是否存在,存在返回1,否则返回0(如果键不存在也返回0) hexists user email ==> 0
HSETNX key field value 当字段不存在时赋值 hsetnx user name sam ==> 0 ; HSETNX user email xxx@xxx.com ==> 1
HINCRBY key field increment 参考incrby命令 hincrby user age 1 ==> 19
HKEYS key 获取键中所有字段名 hkeys user ==> "name" "age" "email"
HVALS key 获取所有的字段值 hvals user ==> "frek" "19" "xxx@xxx.com"
HLEN key 获取字段数量 hlen user ==> 3
HDEL key field[ field..] 删除一个或多个字段,返回删除的字段数 hdel user email age ==> 2

list 列表类型

列表类型可以存储一个有序的字符串列表

命令 描述 示例
LPUSH key value[ value..] 向列表的左边增加元素,返回增加元素后列表的长度 lpush users fred sam alice ==> 3
RPUSH key value[ value..] 向列表的右边增加元素 rpush users carl lisa nicesu ==> 6
LPOP key 从列表左边移除一个元素,并返回该元素值 lpop users ==> "fred"
RPOP key 从列表的右侧移除一个元素,并返回该元素值 rpop users ==> "nicesu"
LLEN key 返回列表元素个数,键不存在时返回0 llen users ==> 1
LRANGE key start stop 获取列表片段,start和stop支持负数,-1表示右数第一个 lrange users 0 -1 ==> "sam" "alice" "carl" "lisa"
LREM key count value 删除列表中指定的值,返回删除的元素个数 lrem users 2 sam ==> 1
LINDEX key index 获取指定索引元素值 lindex users 0 ==> "carl"
LSET key index value 设置指定索引的元素值 lset users 0 allen ==> OK
LTRIM key start end 只保留列表指定片段,删除其他元素 ltrim users 0 1 ==> OK
LINSERT key BEFORE/AFTER pivot value 向列表插入元素,返回插入后列表长度 linsert users after carl adam ==> 3
RPOPLPUSH source destination 将一个元素从一个列表转移到另一个列表,对source执行rpop,对destination执行lpush,返回被移动的元素值 rpoplpush users usernames ==> "adam"

集合类型

集合中的每个元素都不同,且没有顺序

命令 描述 示例
SADD key member[ member..] 增加一个或多个元素 sadd tags one two three two ==> 3
SREM key member[ member..] 移除一个或多个元素 srem tags two ==> 1
SMEMBERS key 获取集合中所有的元素 smembers tags ==> "three" "one"
SISMEMBER key member 判断元素是否存在集合中 sismember tags one ==> 1
SCARD key 获取集合的元素个数 scard tags ==> 2
SRANDMEMBER key[ count] 返回1个或count个随机元素 srandmember tags ==> "one"
SDIFF key[ key..] 集合差运算
SINTER key[ key..] 集合交集运算
SUNION key[ key..] 集合并集运算

有序集合类型

在集合类型的基础上有序集合类型为每个元素都关联了一个分数,这使我们可以使用集合类型的操作之外,还能做与分数有关的操作。

命令 描述 示例
ZADD key score member[ score member..] 增加一个带分数的元素,如果已存在,则替换分数 zadd scoreboard 60 fred 89 parker 76 tony 59 nicesu ==> 4
ZSCORE key member 获得元素分数 ZSCORE scoreboard nicesu ==> "59"
ZRANGE key start end[ WITHSCORES] 获得排名在某个范围内的元素,返回按score升序排序的元素 zrange scoreboard 0 -1 ==> “nicesu" "fred" "tony" "parker"
ZREVRANGE key start end[ WITHSCORES] 与zrange使用一致,返回按score降序的元素 zrevrange scoreboard 0 -1 withscores ==> "parker" "89" "tony" "76" "fred" "60" "nicesu" "59"
ZRANGEBYSCORE key min max[ WITHSCORES][LIMIT offset count] 获得指定分数范围内的元素 zrangebyscore scoreboard 60 100 ==> "fred" "tony" "parker"
ZREVRANGEBYSCORE key max min[ WITHSCORES][LIMIT offset count] 获得指定分数范围内的元素,降序排序 zrevrangebyscore scoreboard 100 60 ==> "parker" "tony" "fred"
ZINCREBY key increment member 增加某个元素的分数 zincrby scoreboard 1 nicesu ==> 60
ZCARD key 获取集合中元素个数 zcard scoreboard ==> 4
ZCOUNT KEY min max 获得指定分数范围内的元素个数 zcount scoreboard 80 100 ==> 1
ZREM key member[ member..] 删除一个或多个元素 zrem scoreboard nicesu ==> 1
ZRANK key member 获取分数从小到大排序的位置 zrank scoreboard parker ==> 2
ZREVRANK key member 同上 zrevrank scoreboard parker ==> 0
ZREMRANGEBYRANK key start stop 按照排名范围删除元素
ZREMRANGEBYSCORE key min max 按分数范围内删除元素

redis与node.js

安装:

npm install redis
还可以安装C语言写的redis库
npm install hiredis redis
如果安装了hiredis,node_redis会默认调用hiredis提供的库

示例:
    var redis = require("redis"),
    // redis.createClient(port, host, option)
    client = redis.createClient(6379, '127.0.0.1', {auth_pass: 'password'});

    // 如果需要切换数据库,如下操作
    // client.select(3, function() { /* ... */ });

    client.on("error", function (err) {
        console.log("Error " + err);
    });

    client.set("string key", "string val", redis.print);
    client.hset("hash key", "hashtest 1", "some value", redis.print);
    client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
    client.hkeys("hash key", function (err, replies) {
        console.log(replies.length + " replies:");
        replies.forEach(function (reply, i) {
            console.log("    " + i + ": " + reply);
        });
        client.quit();
    });        

像mset可以多参数的命令,参数可以使用数组的方式传:
client.mset(key1, val1, ... keyn, valn, [callback]);
等价于
client.mset([key1, val1, ... keyn, valn], [callback]);

hmset可以接受多参数和对象
client.hmset(hashkey, key1, val1, ... keyn, valn, [callback])
等价于
client.hmset(hashkey, obj, [callback])

更多命令使用请参考: https://github.com/NodeRedis/node_redis 🐵

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容