集合
添加/删除元素
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>