Redis_集合_有序集合操作_3|学习笔记

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 快速学习 Redis_集合_有序集合操作_3

开发者学堂课程【Redis 数据库入门Redis_集合_有序集合操作_3】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/15/detail/54


Redis_集合_有序集合操作_3


内容介绍

一、命令

二、举例


、命令

1.并集

既然是集合,所以他有并集的操作和 set 很类似,并集的操作稍微有一点复杂。 如果是集合的并集,只需要考虑集合元素即可。如果是有序集合的并集,考虑元素同时还得考虑分数。

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight][AGGREGATESUM|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

创建一个集合3个元素的

ZADD scores2 90 peter 60 ben

创建一个集合2个元素的

ZUNIONSTORE scores-all 2 scores1 scores2

把以上2个元素存到另外一个地方去,分别是 scores1 和 scores2,

如果什么都不加,有默认值,默认值是四,是因为 peter 是共同元素,所以根据peter 去重,它的元素最后得到的结果可以通过 zrange 来查看,同时通过withscores 查看分值,默认情况下 scores 是相加,权重是1。

ZUNIONSTORE scores-all1 2 scores1 scores2 AGGREGATE SUM

通过此命令后,对重复元素的分值不再是相加,而是取最小值。

ZUNIONSTORE scores-all2 2 scores1 scores2 WEIGHTS 1 0.5 AGGREGATE SUM

WEIGHTS后面可以跟浮点数。最终的成绩根据权重来计算。  Scores1给1,Scores2给0.5。

ZUNIONSTORE scores-all2 2 scores1 scores2 WEIGHTS 1 0.5 AGGREGATE SUM  

2. 交集

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight][AGGREGATESUM|MIN|MAX]

交集和并集的区别就是交集,会把相同的取出。 如果只有 Peter 相同,那么他只会把 Peter 取出。 然后根据权重和算法进行取和。

numkeys 指定 key 的数量,

必须:

WEIGHTS 选项,与前面设定的 key 对应,对应 key 中每一个 score 都要乘以这个权重 AGGREGATE 选项,指定并集结果的聚合方式;

SUM:将所有集合中某一个元素的 score 值之和作为结果集中该成员的 score 值;

MIN:将所有集合中某一个元素的 score 值中最小值作为结果集中该成员的 score值;

MAX:将所有集合中某一个元素的 score 值中最大值作为结果集中该成员的 score值;


二、举例

1.制作一个网易音乐排行榜。

排行榜是通过用户听的次数来进行排序,技术的操作就可以通过 ZINCRBY,不断往上增加集合中的排序也会不断变化,就会使用 ZRANK 来取其中的元素。

并且排行榜每天都在变,所以就有月排行榜、天排行榜、周排行榜等。但是不需要每天都进行操作。 因为每天的排行榜出来之后,每周的排行榜也就有了。

由此分析:

每首歌的歌名作为元素(先不考虑重复)

每首歌的播放次数作为分值

ZREVRANGE 来获取播放次数最多的歌曲(就是最多播放榜了,云音乐热哥榜,没有竞价,没有权重)

Python 演示:r.zadd( ' sboard ' , 'yellow',1, 'rolling in the deep ',l, ' happy ',l, ' just the way you are ',1)r,zadd( 'sboard ' , ' eye of the tiger ',1, 'bitLie jean' ,1, ' say you say me ',1, ' payphone ' ,1)r.zadd( ' mboard' , 'my heart will go on',1 , 'when you believe ',1 , ' hero ' ,1)

r.zincrby( ' mmboard " , 'yellow " ,5o)

r.zincrby (' mboard ' ,' rolling in the deep ' ,60)r.zincrby( ' mboard ' , ' my heart wilL go on ' ,68.B)r.zincrby ( ' mboard ' , ' iwhen you believe',70)

rlist =r.zpevrange( ' mboard' , 0,9,True)

打印有两种方式,一种是转化为字符串拼接,还有一种是直接通过 format。

2. 新浪微博翻页

新闻网站、博客、论坛、搜索引擎,页面列表条目多,都需要分页

blog 这个 key 中使用时间戳作为 score

以下 blog 均属于同一个人,数字代表发布时间,汉字代表元素 ,通过发布时间就可以对一个人的博客进行排序 。

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'(第一天的排行榜Java 这本书卖了1500本,Redis 这本书卖了1500本,Hadoop 卖了2000本。)

ZADD bookboard-002 1020 'java' 1500 'Redis' 2100 'hadoop'(到第二天的排行榜 Java 这本书卖了1020本,Redis 这本书卖了1500本,Hadoop 卖了2100本。)

ZADD bookboard-003 1620 "java' 1510 'Redis' 3000 'hadoop'(到第三天的排行榜 Java 这本书卖了1620本,Redis 这本书卖了1510本,Hadoop 卖了3000本。)

如果使用

ZUNIONSTORE bookboard-001:003 3 bookboard-001 bookboard-002bookboard-003 默认聚合的方法是不可行的,因为3天是累加的效果,1020中就包括了第一天的1000 。可以直接取最后这一个的销售数量。

方式二:

如果只是卖书这种需求,那么取最后一个销售数量即可,但如果是有可能增,有可能减的话,用Max会比较好。  

ZADD bookboard-o01 1000 'java' 1500 'Redis' 2000 'haoop'

ZADD bookboard-002 1020 'java' 1500 'Redis' 2100 'haoop'

ZADD bookboard-0031620 'java' 1510 'Redis’ 3000 'haoop'

ZUNIONSTORE bookboard-001:003 3 bookboard-001 bookboard-002bookboard-003 AGGREGATE MAX

并集,使用 max

注意∶参与并集运算的集合较多(业务中需求多,计算量大),大量集合会造成Redis 服务器阻塞,因此最好放在空闲时间或者备用服务器上进行计算。

4.京东

用户在进行网购时,会在框选处进行筛选,然后在下面显示商品。但是不会每一次都需要查询,而是会把常用的做缓存。

在查询的时候也不是直接查数据库,而是会把每一个区间内的商品放到一个 set 当中,例如将3.5到4英寸的手机放到一个 set 中,将3G与4G手机放到一个 set 当中以供查询。

以上是集合使用的场景。  

相关文章
|
7天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
115 5
|
12月前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
122 5
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
1493 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
12月前
|
存储 NoSQL 关系型数据库
Redis 有序集合(sorted set)
10月更文挑战第17天
253 4
|
12月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
1330 3
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
158 3
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
106 3
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
271 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
124 2
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
1314 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习