本人也是刚刚开始学习redis,博客就当是我的一个笔记。同时供大家交流学习使用。
redis 官网提供了一个非常好的入门的在线交互式教程:http://try.redis.io/ ,我就是根据这个教程来一步一步学习的。
一、SET/GET
redis 作为 key-value 存储,常常被当做NoSQL使用。key-value 存储的本质就是,通过key能够保持value的值。如果能够唯一确认key,能够稍后取出value的值。SET就是用来存储值的。
SET server:name "weiyw"
redis会永久存储我们的数据。所以我们可以稍后向redis询问“我们在key为server:name存的值是什么?”而,redis将会给我返回 “weiyw”
GET server:name
127.0.0.1:6379 > SET server:name "weiyw"
OK
127.0.0.1:6379 > GET server:name
"weiyw"
二、INCR , DEL
DEL 是通过一个已知key 来删除 value.
INCR 是用来自自增长value.
127.0.0.1:6379 > SET connections 10
OK
127.0.0.1:6379 > INCR connections
(integer) 11
127.0.0.1:6379 > INCR connections
(integer) 12
127.0.0.1:6379 > DEL connections
(integer) 1
127.0.0.1:6379> GET connections
(nil)
127.0.0.1:6379 > INCR connections
(integer) 1
通过上面代码执行结果可以发现,当del后,尝试获取connections的值的时候,会发现为nil,也就是不存在的意思,但是当调用INCR的时候,可以自增长到1。
这说明INCR发现key对应的值不存在的时候,会给其value初始化成0。然后再自增长。
三、EXPIRE , TTL
redis 可以设置一个key的生命周期,这个时间的设置可以通过 EXPIRE完成。
SET resource:lock "Redis Demo"
EXPIRE resource:lock 120
其中,key为resource:lock的对象将会在 120 秒 后被删除。当然我们可以用TTL命令来查看key还可以生存多久
TTL resource:lock
该命令会返回 resource:lock 的生命周期。如果返回 -2 则说明当前key不存在。返回 -1 则说明当前key永远不会过期。
127.0.0.1:6379> SET resource:lock "wei_ya_wen"
OK
127.0.0.1:6379> EXPIRE resource:lock 60
(integer) 1
127.0.0.1:6379> GET resource:lock
"wei_ya_wen"
127.0.0.1:6379> TTL resource:lock
(integer) 41
127.0.0.1:6379> TTL resource:lock
(integer) 37
127.0.0.1:6379> TTL resource:lock
(integer) 37
127.0.0.1:6379> TTL resource:lock
(integer) 35
127.0.0.1:6379> TTL resource:lock
(integer) 14
127.0.0.1:6379> TTL resource:lock
(integer) 1
127.0.0.1:6379> TTL resource:lock
(integer) -2
127.0.0.1:6379> GET resource:lock
(nil)
上面的操作设置了一个 key 为 resource:lock,设置了生命周期为 60 秒。TTL命令可以看出在不同时间段,key的存活时间。当超过60S后,TTL返回-2,说明当前值不存在。为验证准确性,再调用GET,发现确实不存在。返回nil
四、RPUSH, LPUSH, LLEN, LRANGE, LPOP, and RPOP (redis 的LIST 处理,算redis的新特性吧)
redis 也支持集中比较复杂的数据类型。首当其冲的就是list.List可以理解为是一系列顺序排列的值。在redis中,我们可以讲key当做一个list来处理。
RPUSH:将new value 直接放到List末端(R我个人觉得可以理解为right ,也就是右端的意思)
127.0.0.1:6379> RPUSH friends "wei"
(integer) 1
127.0.0.1:6379> RPUSH friends "ya"
(integer) 2
127.0.0.1:6379> RPUSH friends "wen"
(integer) 3
其中的数字表示LIST的长度。
LPUSH: 将 new value 放置到LIST的最前端
127.0.0.1:6379> LPUSH friends "first"
(integer) 4
LRANGE:可以理解为截取 LIST的子集合,需要两个参数。参数1:起始位置下标(从0开始计算),参数2 结束位置下标(当设置为-1时,表示结束位置为当前list的最末端)。
127.0.0.1:6379> LRANGE friends 0 -1
1) "first"
2) "wei"
3) "ya"
4) "wen"
127.0.0.1:6379> LANGE friends 0 1
(error) ERR unknown command 'LANGE'
127.0.0.1:6379> LRANGE friends 0 1
1) "first"
2) "wei"
127.0.0.1:6379> LRANGE friends 1 2
1) "wei"
2) "ya"
上面实例分别查询了
LRANGE friends 0 -1 ====》》获取从 第1个位置到最后一个位置的集合
LRANGE friends 0 1 ====》》获取从第1个位置到第二个位置的集合
LRANGE friends 1 2 ====》》 获取从第2个位置到第三个位置的集合
LLEN : 返回LIST的当前长度
LLEN friends
(integer) 4
LPOP : 类似出队列。删除LIST的第一个元素,并且返回。
127.0.0.1:6379> LPOP friends
"first"
RPOP: 删除LIST的最后一个元素,并且返回。
127.0.0.1:6379> RPOP friends
"wen"
五、SADD, SREM, SISMEMBER, SMEMBERS ,SUNION.(redis 中 Set 数据结构的特性)
redis 还支持set类型。Set 和 List的处理类似,但是除了每个元素只能出现一次
SADD 添加 value 到当前的 Set 中
127.0.0.1:6379>
127.0.0.1:6379> SADD superpowers "wei"
(integer) 1
127.0.0.1:6379> SADD superpowers "ya"
(integer) 1
127.0.0.1:6379> SADD superpowers "wen"
(integer) 1
127.0.0.1:6379> SADD superpowers "wen"
例子中,当我两次添加 "wen"的时候,第二次添加没有成功,返回了 0
SREM 通过给定的value,从set中删除该值
127.0.0.1:6379> SREM superpowers "wen"
(integer) 1
127.0.0.1:6379> SREM superpowers "wen"
(integer) 0
返回的是受影响的数量
SISMEMBER 通过给定value,判断该value是否存在该set中(有点类似jdk 中的contain() 方法)
127.0.0.1:6379> SISMEMBER superpowers "ya"
(integer) 1
127.0.0.1:6379> SISMEMBER superpowers "wen"
(integer) 0
由于 “wen” 在刚刚做删除测试的时候,已经删除了。所以返回0.
SMEMBERS 返回当前set的值的集合