redis学习(二)

集合

添加/删除元素

SADD key member1 member2 ...

SREM key member1 member2 ...

获得集合中的所有元素

SMEMBERS key

127.0.0.1:6380> sadd car benz baoma xiandai
(integer) 3
127.0.0.1:6380> smembers car
1) "baoma"
2) "xiandai"
3) "benz"
127.0.0.1:6380> srem car benz
(integer) 1
127.0.0.1:6380> smembers car
1) "baoma"
2) "xiandai"
127.0.0.1:6380> 

判断某个元素是否在集合中,存在则返回1,不存在则返回0

SISMEMBER key  member

127.0.0.1:6380> sismember car xiandai
(integer) 1
127.0.0.1:6380> sismember car benz
(integer) 0
127.0.0.1:6380> 

集合间的运算

SDIFF key1 key2...   即A-B={x|x∈A且x∈/B}

SINTER key1 key2...   即A∩B={x|x∈A且x∈B}

SUNION key1 key2 ... 即AUB={x|x∈A 或x∈B}

127.0.0.1:6380> sadd a 1 2 3 4 
(integer) 4
127.0.0.1:6380> sadd b 3 4 5 6
(integer) 4
127.0.0.1:6380> sdiff a b
1) "1"
2) "2"
127.0.0.1:6380> sinter a b
1) "3"
2) "4"
127.0.0.1:6380> sunion a b
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6380> 

进行集合运算并将结果存储

SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]

SDIFFSTORE命令和SDIFF命令功能一样,唯一的区别就是前者不会直接返回运算结果,而是将结果存储在destination键中。

SDIFFSTORE命令常用于需要进行多步集合运算的场景中,如需要先计算差集再将结果和其他键计算交集。

获取集合中元素的个数:

SCARD key

随机获得集合中的元素

SRANDMEMBER key [count]

(1)当count为正数时,SRANDMEMBER会随机从集合里获得count个不重复的元素。如果count的值大于集合中的元素个数,则SRANDMEMBER会返回集合中的全部元素。(2)当count为负数时,SRANDMEMBER会随机从集合里获得|count|个的元素,这些元素有可能相同。

127.0.0.1:6380> srandmember a 2
1) "4"
2) "2"
127.0.0.1:6380> srandmember a
"3"
127.0.0.1:6380> 

从集合中弹出一个元素

SPOP KEY  这个随机弹出的

127.0.0.1:6380> smembers a
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6380> spop a
"1"
127.0.0.1:6380> spop a
"3"
127.0.0.1:6380> smembers a
1) "2"
2) "4"
127.0.0.1:6380> 

 有序集合

 

有序集合类型在某些方面和列表类型有些相似。
(1)二者都是有序的。
(2)二者都可以获得某一范围的元素。
但是二者有着很大的区别,这使得它们的应用场景也是不同的。
(1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的
应用。
(2)有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度是O(log(N)))。
(3)列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改这个元素的分数)。
(4)有序集合要比列表类型更耗费内存。有序集合类型算得上是 Redis的5种数据类型中最高级的类型了,在学习时可以与列表类型和集合类型对照理解。

增加元素

ZADD key scord member [scord member ...]

修改某个元素的分数

ZADD key scord member

获取元素的分数

ZSCORE key member

127.0.0.1:6380> zadd cheeron 90 math 80 english 89 chinese
(integer) 3
127.0.0.1:6380> zadd cheeron 87 english
(integer) 0
127.0.0.1:6380> zscore cheeron math
"90"
127.0.0.1:6380> zscore cheeron english
"87"
127.0.0.1:6380> 

获得排名在某个范围的元素列表

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

ZRANGE命令会按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)。ZRANGE命令与LRANGE命令十分相似,如索引都是从0开始,负数代表从后向前查找(-1表示最后一个元素)。

127.0.0.1:6380> zrange cheeron 0 2
1) "english"
2) "chinese"
3) "math"
127.0.0.1:6380> zrange cheeron 1 -1
1) "chinese"
2) "math"
127.0.0.1:6380> zrange cheeron 2 0
(empty list or set)

如果需要同时获得元素的分数的话可以在ZRANGE命令的尾部加上WITHSCORES参数

127.0.0.1:6380> zrange cheeron 0 -1 withscores
1) "english"
2) "87"
3) "chinese"
4) "89"
5) "math"
6) "90"
127.0.0.1:6380> 

获得指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZRANGEBYSCORE命令参数虽然多,但是都很好理解。该命令按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)的元素:

加了"("则表示不包含的意思

127.0.0.1:6380> zrangebyscore cheeron 80 90
1) "english"
2) "chinese"
3) "math"
127.0.0.1:6380> zrangebyscore cheeron 80 (90
1) "english"
2) "chinese"
127.0.0.1:6380> 

 

posted @ 2015-04-14 11:54  cheerong  阅读(174)  评论(0编辑  收藏  举报