redis中的集合类型(set,sortedset)

2021/11/17 19:12:45

本文主要是介绍redis中的集合类型(set,sortedset),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

set集合

1.添加/移除元素的方式

2.检查元素是否存在

  3.返回集合内的元素

4.集合的操作(差集,交集,并集)

SortedSet有序集合

1.添加元素/移除元素的操作

2.对分值的操作

 3.返回排名

4.范围移除元素

5.返回元素个数

6.并集交集


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值



这篇关于redis中的集合类型(set,sortedset)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程