redis的set集合
2021/9/16 2:05:09
本文主要是介绍redis的set集合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Redis
- 一、Redis 数据模型
- 数据模型图
- 二、Set集合
- 2.1set集合相关命令
- 2.1.1增加一个或多个元素
- 2.1.2移除一个或者多个元素
- 2.1.3返回集合包含的所有元素
- 2.1.4检查给定元素是否存在于集合中
- 2.1.5集合的无序性
- 2.1.6随机返回集合中指定个数的
- 2.1.7返回元素个数、移除
- 三、Set的集合操作
- 3.1差集
- 3.2交集
- 3.3并集
- 四、SortedSet有序集合
- 4.1增加一个或多个元素
- 4.2移除一个或者多个元素
- 4.3显示分值
- 4.4增加或者减少分值
- 4.5返回元素的排名(索引)
- 4.6返回元素的逆序排名
- 4.7返回指定索引区间元素
- 4.8返回指定分值区间元素
- 4.9移除指定排名范围的元素、移除指定分值范围的元素
- 4.10并集、交集
一、Redis 数据模型
数据模型图
二、Set集合
无序的、去重的 元素是字符串类型 最多包含2^32-1元素
2.1set集合相关命令
2.1.1增加一个或多个元素
SADD key member [member ...] 如果元素已经存在,则自动忽略 举例 SADD friends peter SADD friends jack tom john SADD friends may tom
2.1.2移除一个或者多个元素
SREM key member [member ...] 元素不存在,自动忽略 举例 SREM friends peter SREM friends tom john
2.1.3返回集合包含的所有元素
SMEMBERS key 如果集合元素过多,例如百万个,需要遍历,可能会造成服务器阻塞,生产环境应避免使用
2.1.4检查给定元素是否存在于集合中
SISMEMBER key member
2.1.5集合的无序性
SADD friends "peter" "jack" "tom" "john" "may" "ben" SADD anotherfriends "peter" "jack" "tom" "john" "may" "ben" SMEMBERS friends SMEMBERS anotherfriends 注意,SMEMBERS 有可能返回不同的结果,所以,如果需要存储有序且不重复的数据使用有序集合,存储有序可重复的使用列表
2.1.6随机返回集合中指定个数的
SRANDMEMBER key [count] 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值 如果 count 为 0,返回空 如果 count 不指定,随机返回一个元素 举例 SADD friend "peter" "jack" "tom" "john" "may" "ben" SRANDMEMBER friends 3 SRANDMEMBER friends -5
2.1.7返回元素个数、移除
返回集合中元素的个数 SCARD key 键的结果会保存信息,集合长度就记录在里面,所以不需要遍历 随机从集合中移除并返回这个被移除的元素 SPOP key 把元素从源集合移动到目标集合 SMOVE source destination member
三、Set的集合操作
3.1差集
SDIFF key [key ...],从第一个key的集合中去除其他集合和自己的交集部分 SDIFFSTORE destination key [key ...],将差集结果存储在目标key中 举例 SADD number1 123 456 789 SADD number2 123 456 999 SDIFF number1 number2
3.2交集
SINTER key [key ...],取所有集合交集部分 SINTERSTORE destination key [key ...],将交集结果存储在目标key中 举例 SADD number1 123 456 789 SADD number2 123 456 999 SINTER number1 number2
3.3并集
SUNION key [key ...],取所有集合并集 SUNIONSTORE destination key [key ...],将并集结果存储在目标key中 举例 SADD number1 123 456 789 SADD number2 123 456 999 SUNION number1 number2
例: 新浪微博的共同关注 需求:当用户访问另一个用户的时候,会显示出两个用户共同关注哪些相同的用户 设计:将每个用户关注的用户放在集合中,求交集即可 实现如下: peter={'john','jack','may'} ben={'john','jack','tom'} 那么peter和ben的共同关注为: SINTER peter ben 结果为 {'john','jack'}
四、SortedSet有序集合
类似Set集合 有序的、去重的 元素是字符串类型 每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同 最多包含2^32-1元素
4.1增加一个或多个元素
ZADD key score member [score member ...] 如果元素已经存在,则使用新的score 举例 ZADD fruits 3.2 香蕉 ZADD fruits 2.0 西瓜 ZADD fruits 4.0 番石榴 7.0 梨 6.8 芒果
4.2移除一个或者多个元素
ZREM key member [member ...] 元素不存在,自动忽略 举例 ZREM fruits 番石榴 梨 芒果 ZREM fruits 西瓜
4.3显示分值
ZSCORE key member 举例 ZSCORE fruits 芒果 ZSCORE fruits 西瓜
计算机并不能精确表达每一个浮点数,都是一种近似表达
4.4增加或者减少分值
ZINCRBY key increment member increment为负数就是减少 举例 ZINCRBY fruits 1.5 西瓜 ZINCRBY fruits -0.8 香蕉
4.5返回元素的排名(索引)
ZRANK key member 举例 ZRANK fruits 西瓜 ZRANK fruits 番石榴 ZRANK fruits 芒果
4.6返回元素的逆序排名
ZREVRANK key member 举例 ZREVRANK fruits 西瓜 ZREVRANK fruits 番石榴 ZREVRANK fruits 芒果
4.7返回指定索引区间元素
ZRANGE key start stop [WITHSCORES] 如果score相同,则按照字典序lexicographical order 排列 默认按照score从小到大,如果需要score从大到小排列,使用ZREVRANGE 举例 ZRANGE fruits 0 2 ZRANGE fruits -5 -4 ZREVRANGE key start stop [WITHSCORES] 如果score相同,则按照字典序lexicographical order 的 逆序 排列 默认按照score从大到小,如果需要score从小到大排列,使用ZRANGE 举例 ZREVRANGE fruits 0 2 ZREVRANGE fruits -5 -4
4.8返回指定分值区间元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回score默认属于[min,max]之间,元素按照score升序排列,score相同字典序 LIMIT中offset代表跳过多少个元素,count是返回几个。类似于Mysql 使用小括号,修改区间为开区间,例如(5、(10、5) -inf和+inf表示负无穷和正无穷 举例 ZRANGEBYSCORE fruits 4.0 7.0 ZRANGEBYSCORE fruits (4 7 ZRANGEBYSCORE fruits -inf +inf ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回score默认属于[min,max]之间,元素按照score降序排列,score相同字典降序 LIMIT中offset代表跳过多少个元素,count是返回几个。类似于Mysql 使用小括号,修改区间为开区间,例如(5、(10、5) -inf和+inf表示负无穷和正无穷 举例 ZREVRANGEBYSCORE fruits 7.0 4.0 ZRANGEBYSCORE fruits 7 (4 ZRANGEBYSCORE fruits +inf -inf
4.9移除指定排名范围的元素、移除指定分值范围的元素
ZREMRANGEBYRANK key start stop 举例 ZREMRANGEBYRANK fruits 0 2 ZRANGE fruits 0 -1 ZREMRANGEBYSCORE key min max 举例 ZREMRANGEBYSCORE fruits 3.0 5.0 ZRANGE fruits 0 -1
返回集合中元素个数 ZCARD key 返回指定范围中元素的个数 ZCOUNT key min max ZCOUNT fruits 4 7 ZCOUNT fruits (4 7
4.10并集、交集
并集
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值 举例 ZADD scores1 70 tom 80 peter 60 john ZADD scores2 90 peter 60 ben ZUNIONSTORE scores-all 2 scores1 scores2 ZUNIONSTORE scores-all1 2 scores1 scores2 AGGREGATE SUM ZUNIONSTORE scores-all2 2 scores1 scores2 WEIGHTS 1 0.5 AGGREGATE SUM
交集
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值
例1:网易音乐排行榜怎么做?
分析:
每首歌的歌名作为元素(先不考虑重复)
每首歌的播放次数作为分值
ZREVRANGE来获取播放次数最多的歌曲(就是最多播放榜了,云音乐热歌榜,没有竞价,没有权重)
例2:新浪微博翻页
新闻网站、博客、论坛、搜索引擎,页面列表条目多,都需要分页
blog这个key中使用时间戳作为score
ZADD blog 1407000000 '今天天气不错' ZADD blog 1450000000 '今天我们学习Redis' ZADD blog 1560000000 '几个Redis使用示例' ZREVRANGE blog 10 20
例3:京东图书畅销榜
单日榜,计算出周榜单、月榜单、年榜单 怎么做?
京东图书畅销榜
ZADD bookboard-001 1000 'java' 1500 'Redis' 2000 'haoop' ZADD bookboard-002 1020 'java' 1500 'Redis' 2100 'haoop' ZADD bookboard-003 1620 'java' 1510 'Redis' 3000 'haoop' ZUNIONSTORE bookboard-001:003 3 bookboard-001 bookboard-002 bookboard-003,行吗?
ZADD bookboard-001 1000 'java' 1500 'Redis' 2000 'haoop' ZADD bookboard-002 1020 'java' 1500 'Redis' 2100 'haoop' ZADD bookboard-003 1620 'java' 1510 'Redis' 3000 'haoop' ZUNIONSTORE bookboard-001:003 3 bookboard-001 bookboard-002 bookboard-003 AGGREGATE MAX 并集,使用max 注意:参与并集运算的集合较多,会造成Redis服务器阻塞,因此最好放在空闲时间或者备用服务器上进行计算
这篇关于redis的set集合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-18Redis安装入门:新手必读指南
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作