【Redis】set 和 zset 范例的先容和常用命令

守听  金牌会员 | 2025-2-12 23:18:26 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 872|帖子 872|积分 2616


1. set

1.1 先容

set 范例和 list 差别的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操纵,还支持多个集合取交集,并集,差集
1.2 常用命令

命令
先容
时间复杂度
sadd key element [element ...]
将一个或多个元素添加到指定的集合中
O (k),k 是要添加的元素个数
srem key element [element ...]
从指定集合中移除一个或多个元素
O (k),k 是要移除的元素个数
scard key
获取指定集合中的元素数量
O (1)
sismember key element
判断指定元素是否存在于集合中
O (1)
srandmember key [count]
从指定集合中随机返回一个或多个元素
O (n),n 是count的值
spop key [count]
从指定集合中随机移除并返回一个或多个元素
O (n),n 是count的值。
smembers key
获取指定集合中的全部元素。
O (k),k 是集合中的元素个数
sinter key [key ...] sinterstore
求多个集合的交集
O (m * k),k 是几个集合中元素最小的个数,m 是参与交集计算的键个数
sunion key [key ...] sunionstore
求多个集合的并集
O (k),k 是多个集合的元素个数总和
sdiff key [key ...] sdiffstore
求多个集合的差集
O (k),k 是多个集合的元素个数总和
1.3 内部编码

intset:当集合中的全部元素都是整数,并且元素数量较少时会使用intset编码来存储集合
hashtable:当集合中的元素不满足intset的条件,会使用hashtable编码来存储集合
1.4 应用场景

用户标签:为用户、商品等实体打标签,每个实体对应一个 Set,标签作为 Set 中的元素。
去重:在处理大量数据时,常常需要去除重复元素。比方在日志分析中,记录用户的访问 IP 地点,使用 Set 可以自动对 IP 举行去重,保证每个 IP 只被记录一次。
2. zset

2.1 先容

zset 保留了 set 集合中不能有重复成员的特点,与之差别的是,zset 中的元素是有序的,集合中的每一个元素都有一个唯一的浮点范例的分数(score)与之关联,依次来举行排序,使得有序集合中的元素可以维护有序性,虽然集合中的元素是不能重复的,但是分数允许重复。
2.2 常用命令

命令
先容
时间复杂度
zadd key score member [score member ...]
向有序集合中添加一个或多个成员,以及成员对应的分值
O (k * log (n)),k 是添加成员的个数,n 是当前有序集合的元素个数
zcard key
获取有序集合的成员数量
O (1)
zscore key member
获取有序集合中指定成员的分值
O (1)
zrank key member
返回有序集合中指定成员的排名(从 0 开始,按分值从小到大排序)
O (log (n)),n 是当前有序集合的元素个数
zrevrank key member
返回有序集合中指定成员的排名(从 0 开始,按分值从大到小排序)
O (log (n)),n 是当前有序集合的元素个数
zrem key member [member ...]
移除有序集合中的一个或多个成员
O (k * log (n)),k 是删除成员的个数,n 是当前有序集合的元素个数
zincrby key increment member
为有序集合中指定成员的分值加上增量 increment
O (log (n)),n 是当前有序集合的元素个数
zrange key start end [withscores]
按分值从小到大返回有序集合中指定区间内的成员
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数
zrevrange key start end [withscores]
按分值从大到小返回有序集合中指定区间内的成员
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数
zrangebyscore key min max [withscores]
按分值从小到大返回有序集合中指定分值区间内的成员
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数
zrevrangebyscore key max min [withscores]
按分值从大到小返回有序集合中指定分值区间内的成员
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数
zcount key min max
计算有序集合中指定分值区间内成员的数量
O (log (n)),n 是当前有序集合的元素个数
zremrangebyrank key start end
按排名删除有序集合中指定区间内的成员
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数
zremrangebyscore key min max
按分值删除有序集合中指定分值区间内的成员
O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数
zinterstore destination numkeys key [key ...]
计算给定的一个或多个有序集合的交集,并将结果存储在新的有序集合 destination 中
O (n * k) + O (m * log (m)),n 是输入集合最小的元素个数,k 是集合个数,m 是目的集合元素个数
zunionstore destination numkeys key [key ...]
计算给定的一个或多个有序集合的并集,并将结果存储在新的有序集合 destination 中
O (n) + O (m * log (m)),n 是输入集合总元素个数,m 是目的集合元素个数
 
2.3 内部编码

ziplist:假如有序集合中的元素个数较少,大概单个元素体积较小,就使用 ziplist 存储
skiplist:假如元素个数较多大概单个元素体积较大,使用 skiplist 存储
2.4 应用场景

基于 zset 有序的特点,可以用到许多场景中:

  • 排行榜系统:好比游戏中的玩家排行榜,以玩家的积分作为分值,玩家昵称作为成员,能按分值(积分)对玩家举行排序,快速获取排名靠前或特定区间的玩家书息;视频平台的视频热度排行榜,以视频的播放量、点赞数等综合指标作为分值,视频 ID 作为成员,展示热门视频。
  • 计分系统:在在线测验系统中,以考生的测验成绩作为分值,考生 ID 作为成员,可方便统计成绩排名、获取特定分数段的考生信息。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表