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

介绍

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

集合和列表之间的对比

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

运用场景

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

命令

一、集合

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值