redis:set与zset
学习自:Redis 的五种基本数据类型_redis的五种数据类型_喵先森爱吃鱼的博客-CSDN博客
1、前言
集合,存放一系列无重复元素。一个Set最多存储2^32-1个元素。
Redis除了支持集合内的增删改查,还支持集合间取并、交、差集。
内部编码
intset(整数集合):①集合中的元素都是整数;②元素个数<intset-entries配置(默认512);
hashtable(哈希表):当集合类型不满足intset条件时,使用hashtable作为内部实现
应用场景
标签功能
生成随机数、抽奖
社交需求
2、常用命令
命令 |
用法 |
说明 |
scard |
scard K | K中元素个数 |
sadd |
sadd K V1 V2 V3 V4 | 往K中添加数据 |
srem |
srem K V | 从K中移除数据 |
sismember | sismember K V | 判断V是否在K中 |
smembers | smembers K | 返回K中所有的V |
srandmember | srandmember K n |
随机返回n个K中的元素。 当n超过K的大小时,返回全部元素。 n可为负数,此时效果同绝对值 |
spop | spop K n | 随机删除n个K中的元素 |
smove | smove K1 K2 V | 把K1中的V移动至K2中 |
sdiff | sdiff K1 K2 |
返回K1和K2的差集(并非补集) 结果与K的顺序有关 |
sdiffstore | sdiffstore K3 K1 K2 | 求差集,并把结果存入K3 |
sinter | sinter K1 K2 | 求交集 |
sinterstore | sinterstore K3 K1 K2 | 求交集,并把结果存入K3 |
sunion | sunion K1 K2 | 求并集 |
sunionstore | sunionstore K3 K1 K2 | 求并集,并将结果存入K3 |
具体命令
1、sadd:添加元素
用法:sadd K e1 [e2 e3 ...]
说明:往K中添加元素e1 e2 e3
返回值:添加成功的元素个数(如果有重复元素则会添加失败)
2、srem:删除元素
用法:srem K e1 [e2 e3 ...]
返回值:成功删除的元素个数
3、scard:元素个数
用法:scard K
4、sismember:判断e是不是K的元素
用法:sismember K e
返回值:
1:e是K的元素;
0:不是
5、smembers:返回K中全部的V
用法:smember K
6、srandmember:随机取n个元素
用法:srandmember K n
说明:
n不写时默认为1
7、spop:随机删除n个元素
用法:spop K n
8、smove:把一个K中的V移动到另一个K中
用法:smove K1 K2 v1
说明:把v1从K1移到K2
9、sdiff、sdiffstore:求差集
10、sinter、sinterstore:求交集
11、SUNION、SUNIONSTORE:求并集
zset或SortedSet
1、前言
给数据加了Score的Set,可以根据Score对set中的数据进行排序。
底层用一个跳表(SkipList)+hash表实现。
特性
- 可排序
- 元素不重复(但是score可以)
- 查询速度快
内部编码
ziplist(压缩列表):当集合元素<zset-max-ziplist-entries配置(默认128),且元素值都<zset-max-ziplist-value配置(默认64B)。这种数据结构可以有效减少内存使用
skiplist(跳跃表):不满足ziplist条件时,此时用ziplist的读写效率会下降
使用场景
排行榜系统
2、常用命令
命令 |
用法(下文S代表V的score) |
说明 |
zcard |
zcard K | K中元素数 |
zadd |
zadd K S V | 往K中添加V(分数S) |
zrem |
zrem K V |
删除K中的V |
zscore |
zscore K V |
获取K中某个V的S |
zrank |
zrank K V |
获取K中某个V的排名 |
zcount |
zcount K min max | 统计S在[min,max]内的元素个数 |
zincrby |
zincrby K n V | 让K中某个V的S自增n |
zrange | zrange K min max |
数据排序,根据S从小到大 如果要同时显示S,则要在最后加withscores |
zrevrange | zrevrange K min max |
数据排序,根据S从大到小 |
zrangebyscore | zrangebyscire K min max |
安装S排序后,获取S范围[min,max]内的V |
zdiff | zXXX n K1 K2 |
求差集 求交集 n为求集合的K的个数 求并集 |
zinter | ||
zunion | ||
以上所有排名都是升序,如果要降序,则在命令的z后加上rev即可,如上文的zrange和zrevrange |
zcard:元素个数
zadd:增加元素并完成排序
zrem:弹出指定元素v
zscore:查询K中V的S
zrange:查询指定下标范围的V(按照分数排序得到的下表)
zrevrange:与zrange类似,只是这里是降序
zcount:统计K中S在某个区间内的V
默认是[ min , max ],如果要排除某个区间边缘,则加一个(
zrangebyscore:统计S在指定区间内的V,加上withscores可以同时返回score
zrank:返回K中某个V的排名
zrevrank:与zrank相同,但这里排序是逆序(从大到小)
zincrby:让K中指定的V的S加3
zinter、zinterstore:求交集
zlexcount:计算成员间的成员数量
zrangebylex:返回指定区间内的成员,按S正序排序
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性