redis中的集合类型(set,sortedset)
作者:互联网
目录
set集合
特点:无序,去重,元素是字符串类型
最多包含2^32-1个元素
我创建了一个key: people 传入值的顺序是:red green blue
但是在数据库中查询的顺序并不是按我传入的顺序,这就是因为集合的无序性
1.添加/移除元素的方式
sadd key member(member1...) 如果添加的元素存在了,直接忽略
以下方法等效:
srem key member [member1 ...]元素如果不存在直接忽略
2.检查元素是否存在
sismember key member 查找给定元素是否存在集合中,存在返回1
3.返回集合内的元素
如果集合内的元素过多,可能
导致redis崩溃,不建议这么干
SRANDMEMBER key [count] 随机返回集合中指定个数的
如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。
如果 count 大于等于集合基数,那么返回整个集合
如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值
如果 count 为 0,返回空
如果 count 不指定,随机返回一个元素
count为负数的情况单独列出来: 确实是有重复值出现
返回集合中元素个数: scard key
随机从集合中移除并返回这个被移除的元素 SPOP key
把元素从源集合移动到目标集合 SMOVE source destination member
4.集合的操作(差集,交集,并集)
差集 sidiff key1 key2(key3...) 从key1的集合中去除其他集合和自己的交集部分
将差集的结果保存到一个目标key中:sdiffstore 目标key key1 key2(key3...)这个目标key可以是不存在的,他会帮我们创建
交集:sinter key key1 key2(key3...)
存储交集:sinterstore 目标key key1 key2(key3...)
对于存储结果的目标key,里面的内容是被覆盖操作的
并集:sunion key1 key2(key3...)
存储并集:sunionstore 目标key key1 key2(key3...)
集合与自身的差集为空;
一个集合可以与多个集合求差集
存储查询的差集
存储查询到的交集, 我上面明明存储的是green,这里消失了,所以这里的存储操作是重写目标key里面的内容
SortedSet有序集合
sortedset类似于set集合,所以也是去重的
不同于set的是他是有序的,并且他的每一个元素都关联这一个浮点数分值,按照从小到大的顺序排列集合中的元素,这个分值可以重复
1.添加元素/移除元素的操作
zadd key score member(score1 member1...)
这么看可能不是太好理解,写个例子fruit是我们的key,集合里卖的元素是一一对应的,3.0是apple的值,4.0实际orange的值
如果元素已经存在,则使用新的score
可以看到上面apple的值从3变成了5
在输入分数的时候,存储的结果可能不大一样,但是不影响结果
zrem key member(member...) 移除元素的操作
可视化界面查看结果
2.对分值的操作
显示元素的对应分值 zscore key member
增加/减少分值 zincrby key number member
nember为正就是增加,为负就是减少
也可以作为加入元素的操作,你输入的member如果存在就会创建,对应的分值就是number
示例:分值加增加操作
我的集合中并没有pear这个元素,这里增加成功l,集合中也出现了新的元素pear
3.返回排名
zrank key member 返回元素从小到大顺序的排名(排名为从0开始)
zrevrank key member 返回元素的逆序排名(最后一位是0)
zrange key start stop 返回指定索引区间元素
zrevrange key start stop 返回指定索引区间元素(逆序) 返回指定区间的元素中,如果分值相同则按照字典序lexicographical order (顺序/逆序)排列
zrangebyscore key min max (limit offset count) 返回指定分值区间的元素,括号内的内容加上后表示跳过offset 个元素,返回count个数的元素
我的集合现在只有2个元素,查看元素的排名:
查看元素的逆序排名 :
返回指定区间索引(正序)
添加了一个与pear分值相同的元素,apple字典顺序明显在pear前
索引是从大到小的顺序:0,1,2
也可以是 -3,-2,-1
返回指定区间索引(逆序)将上面的结果以逆序返回了
返回指定分值区间的元素
使用limit 后:跳过一个元素,返回一个元素,所以只返回了第二位
4.范围移除元素
移除指定排名范围的元素 ZREMRANGEBYRANK key start stop
移除指定分值范围的元素 ZREMRANGEBYSCORE key min max
5.返回元素个数
返回集合中元素个数 ZCARD key
返回指定范围中元素的个数 ZCOUNT key min max
6.并集交集
并集:
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
numkeys指定key的数量,
WEIGHTS选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重
AGGREGATE选项,指定并集结果的聚合方式
SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score值
MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值
MAX:将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值
例子:创建score1和score2里面存储成绩和人名
127.0.0.1:6379> ZADD scores1 70 tom 80 peter 60 john
(integer) 3
127.0.0.1:6379> ZADD scores2 90 peter 60 ben
(integer) 2
求并集,没有加任何追加条件 ,可以看见他帮我们把元素名称相同的分值相加了
127.0.0.1:6379> ZUNIONSTORE scores-all 2 scores1 scores2
(integer) 4
求并集, 加上AGGREGATE条件是sum,sum是将所有集合中某一个元素的score值之和作为结果集中该成员的score值
127.0.0.1:6379> ZUNIONSTORE scores-all1 2 scores1 scores2 AGGREGATE SUM
(integer) 4
求并集,将上面的元素分值乘以各自的权重,score1的分值乘以1,score2的分值乘以2
127.0.0.1:6379> ZUNIONSTORE scores-all2 2 scores1 scores2 WEIGHTS 1 0.5 AGGREGATE SUM
(integer) 4
127.0.0.1:6379>
交集:
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
numkeys指定key的数量,
WEIGHTS选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重
AGGREGATE选项,指定并集结果的聚合方式
SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score值
MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值
MAX:将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值
标签:返回,set,分值,元素,redis,sortedset,score,key,集合 来源: https://blog.csdn.net/zzds111/article/details/121367668