Redis应用(五)---集合类型

介绍

Redis支持两种集合分别是有序集合和无序集合

集合和列表之间的对比

集合类型 列表类型 有序集合类型
存储内容 最多23212 ^ {32} - 1个字符串 最多23212 ^ {32} - 1个字符串 最多23212 ^ {32} - 1个字符串
有序性
唯一性

运用场景

集合常用的操作是向集合中加入或删除元素;判断元素是否存在;
在多个集合之间还可以进行交集、并集、差集运算。

命令

一、集合

1.增加/删除元素
sadd key member [member …] :向集合添加元素,返回成功加入集合的个数
srem key member [member …] :删除集合中的元素,返回成功删除的个数

2.获取集合中的所有元素
smembers key

3.判断元素是否在集合中
sismember key member
存在返回1,不存在返回0

4.集合间运算
(1)差集
sdiff key [key…]
在这里插入图片描述
在这里插入图片描述

2.交集
sinter key [key…]
在这里插入图片描述
在这里插入图片描述
3.并集
sunion key [key …]

在这里插入图片描述

4.获取集合中元素的个数
scard key
在这里插入图片描述
5.进行集合运算并将结果存储
sdiffstore destination key [key …]
sinterstore destination key [key …]
sunionstore destination key [key …]
这个3个命令和之前的集合运算命令差不多,唯一的区别是不会返回运算结果,而是将结果放入destination键中。
这些命令常用于需要多步集合运算的场景,如先计算两个集合的差集,再将结果和其他集合计算并集。

6.随机获取集合中的元素
srendmember key [count]
count 为指定返回的元素个数

7.从集合中弹出一个元素
spop key 会从集合中随机选择一个元素弹出。

二、有序集合

redis的有序集合类型是在集合的基础上为每个元素都关联了一个分数,从而实现有序

有序集合和列表在某些功能上是一致的
相似点:
(1)二者都是有序的
(2)二者都可以获得某一范围的元素

但是二者的应用场景有很大不同
(1)列表是通过链表实现的,获取靠近两边的元素速度越快,当元素增多后,获取中间的元素,速度会变慢,所以它更加适合实现“新鲜事”或“排行榜”的应用
(2)有序集合类型使用的是散列表和跳跃表(Skip list)实现的,所以即使读取中间位置的数据,速度也是很快的。
(3)列表中不能简单地改变元素的位置,有序集合可以(改变分数就行)
(4)有序集合要比列表更加耗费内存

1.增加元素
zadd key score member [score member …]
该命令向有序集合中加入元素和该元素的分数,如果集合中已经有了该元素,则用新的分数代替原有的分数。

比如我们用有序集合zset 存储 “张三”,“李四”,“王五” 的工资。
在这里插入图片描述
假如此时发现李四的工资输错了,也可以修改
zadd zset 15000 李四

2.获得元素的分数
zscore key member

3.获得排名在某个范围的元素列表
zrange key start stop [withscores]
该命令会按照元素的分数从小到大返回从索引start 到stop之间的元素(0 -1 表示返回所有的元素);
加上参数withscores 会将分数也一起返回
在这里插入图片描述
4.获取指定分数范围的元素
zrangebyscore key min max [withscores] [limit offset count]
该命令按照元素分数从小到大的顺序返回分数在min和max之间的元素(包含min和max)
min和max 还可以用无穷大来表示 -inf 和 +inf 分别代表负无穷和正无穷
limit offset count 参数和数据库的用法一样,即在获得元素的基础上向后偏移offset个元素,并且只获取前count个元素。

在有序集合zset中再添加点元素方便演示
在这里插入图片描述
获取工资超过10003的人,如果希望分数范围不包含断点值可以加上“(”符号,如下表示不包含10003
在这里插入图片描述
获取工资高于10000的从第2个人开始的3个人
在这里插入图片描述
zrevrangebyscore 正好相反,会按元素分数从大到小排列

5.获取集合中元素的数量
zcard key

6.获取指定分数范围内的元素个数
zcount key min max

7.删除一个或多个元素
zrem key member [member …]

8.按照排名范围删除元素
zremrangebyrank key start stop
按照元素分数从小到大的顺序,删除指定排名范围内的所有元素。

9.按照分数范围删除元素
zremrangebyscore key min max
删除指定分数范围内的所有数据。

10.获取元素的排名
zrank key member
从0开始,分数最小的元素排名为0

zrevrank key member
分数最大的元素排名为0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章