第2章 API的理解和使用 第6部分
有序集合zset
有序集合
不能有重复成员,元素可以排序,和列表的索引下标不同,
排序依据的是分数(score),分数可以重复。提供获取
指定分数和元素范围查询、计算成员排名等功能。
数据结构 | 是否允许重复元素 | 是否有序 | 有序实现方式 | 应用场景 | 列表 | 是 | 是 | 索引下标 | 时间轴、消息队列等 |
集合 | 否 | 否 | 无 | 标签、社交等 |
有序集合 | 否 | 是 | 分数 | 排行榜、社交等 |
命令
1、集合内
[list]
添加成员
zadd key score member [score member ...]
zadd有nx、xx、ch、incr是个选项:
nx:用于新增,member必须不存在
xx:用于更新,member必须存在
ch:返回zadd操作后,有序集合元素和分数发生变化的个数
incr:对score做增加,相当于zincrby命令
zadd的时间复杂度是O(log(n)),而sadd时间复杂度是O(1)
计算成员个数
zcard key
计算某个成员的分数
zscore key member
计算成员的排名
zrank key member
zrevrank key member
zrank是从分数低到高返回成员的排名,zrevrank则反之
删除成员
zrem key member [member ...]
增加成员的分数
zincrby key increment member
返回指定排名范围的成员
zrange key start end [withscores]
zrevrange key start end [withscores]
加上withscores会同时返回成员的分数
返回指定分数范围的成员
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key min max [withscores] [limit offset count]
withscores会同时返回成员的分数
[limit offset count]限制输出的起始位置和个数
min和max支持开区间(小括号)和闭区间(中括号),-inf和+inf分别表示无限小和无限大
返回指定分数范围成员个数
zcount key min max
删除指定排名内的升序元素
zremrangebyrank key start end
删除指定分数范围的成员
zremrangebyscore key min max
[/list]
2、集合间
[list]
交集
zinterstore destination numkeys key [key...] [weights weight [weight ...]] [aggregate sum|min|max]
destination:交集计算结果保存的键
numkeys:需要做交集计算键的个数
key [key ...]:需要做交集计算的键
weights weight [weight ...]:每个键的权重,默认为1,计算时,键中的每个member会将分数乘以权重,每个weight对应上面的每个key
aggregate sum|min|max:计算成员交集后,分值可以按照sum、min、max做汇总,默认为sum
并集
zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggreagate sum|max|min]
[/list]
内部编码
- ziplist:压缩列表,当有序集合的元素个数小于zset-max-ziplist-entries配置(默认128个),且每个元素的值都小于zset-max-ziplist-value配置(默认64字节),Redis会用ziplist作为有序集合的内部实现,可以有效减少内存的使用
- skiplist:跳跃表,当ziplist条件不满足时,使用skiplist作为内部实现,因为此时ziplist的读写效率会下降
使用场景
有序集合主要用于排行榜系统,可以按照不同维护进行排行,如时间、播放数量、获得赞数等。
如对于获得赞数,记录用户每天上传视频的排行榜,包括以下几块功能:
[list]
添加用户赞数
通过zadd和zincrby记录,william上传视频获得3个赞,然后又获得了1个赞
zadd user:ranking:2017_07_07 william 3
zincreby user:ranking:2017_07_07 william 1
取消用户赞数
将用户william从榜单上删除
zrem user:ranking:2017_07_07 william
展示获取赞数最多的10个用户
zrevrangebyrank user:ranking:2017_07_07 0 9
展示用户分数
zscore user:ranking:2017_07_07 william
zrank user:ranking:2017_07_07 william
[/list]
分享到:
相关推荐
### 《redis运维与开发》读书笔记知识点梳理 #### 一、Redis-cli工具详解 - **基础使用**:`redis-cli`是Redis提供的命令行工具,用于与Redis服务器交互。 - `-h`: 指定Redis服务器的IP地址。 - `-p`: 指定...
是根据《redis开发与运维》一书和其他redis书摘抄的记录综合的笔记
运维工程师,运维开发工程师,架构师,高级运维工程师 你将会学到: 掌握redis的安装部署、主从+哨兵模式、cluster集群模式的伸缩容,解决redis常见问题 课程简介: redis课程大纲内容如下: 1.redis的编译安装 2....
笔记是本人工作期间总结的所有部署与运维的方法,我相信能帮助大家的! 其中重点讲解了以下的步骤: 一、PXC集群安装 二、MySQL集群安装 三、RedisCluster集群安装 四、后端项目上线方法
### Redis 学习笔记知识点概览 #### 一、Redis 概述与应用场景 ##### 1.1 NoSQL 数据库简介 - **定义**: NoSQL(Not Only...无论是作为开发人员还是运维工程师,深入掌握 Redis 都能显著提高应用程序的性能和可靠性。
本文旨在总结运维笔记中的一些重要知识点,涵盖 Linux 基础命令行、文件系统、压缩解压命令、系统磁盘、用户组群命令、正则表达式、Shell 脚本、NFS 服务配置、Nginx 基础、反向代理、负载均衡配置、Redis 基础、...
k8s(kubernetes)相关重要知识点运维笔记——详细文档 本文档旨在总结 k8s(kubernetes)相关重要知识点,涵盖 ConfigMap 的概念、数据类型、应用场景、使用方式等。 ConfigMap 是 k8s 中的一种配置管理工具,...
Redis Lua 脚本- Redis 位图操作- Redis 分布式锁- Redis 主从复制- Redis 集群- Redis Sentinel- Redis 高可用架构- Redis 性能优化- Redis 访问控制- Redis 监控与性能调优- Redis 安全配置- Redis 运维。...
MySQL DBA运维笔记详细介绍了数据库相关的基础知识以及MySQL数据库的管理和操作技巧,以下是详细的知识点梳理: 1. 数据库的种类: 1.1 关系型数据库介绍:关系型数据库是以行和列的形式存储数据,支持复杂的查询...
Ansible自动化运维平台 CI和CD代码管理平台 Docker容器实战部署 Kubernetes云计算实战 Linux常用服务器部署实战 Linux系统管理宝典 Linux系统资源限制与加固 MySQL数据库实战 Redis数据库实战 shell脚本高手速成 Web...
通过阅读“狂神redis源码笔记”和解压的“redis-study”文件,你将能够深入理解Redis的内部运作,掌握Java客户端的使用技巧,提升在实际项目中运用Redis的能力。这包括但不限于了解Redis的设计模式、源码实现细节、...
运维笔记涉及的内容广泛,包括系统管理、网络配置、监控、自动化部署等。Kubernetes(K8S)是目前最流行的容器编排工具,它可以帮助管理和部署容器化的应用,实现服务的自动扩展和高可用性。 面试突击训练通常会...
【马哥2016运维笔记】是一份包含丰富的Linux系统管理及运维技术的资料集,其中涵盖了多个关键的开源工具,如Nginx、Redis、Ansible、Zabbix、MySQL以及Keepalived等。这些工具在现代互联网环境中扮演着至关重要的...
Redis 是一个高性能的键值对数据存储系统,常被用作数据库、...以上就是 Redis 实践笔记中关于主从部署、哨兵系统和集群部署的知识点概述,对于实际运维和开发来说,理解并掌握这些内容是构建高可用 Redis 系统的基础。
同时,应考虑开发人员开发的程序使用的版本与所选版本的兼容性,以及在实施新版本前先在内部测试环境中运行一段时间。此外,应该向经验丰富的数据库管理员(DBA)咨询或在技术社区中交流,以确保所选数据库版本的...
综上所述,这份学习笔记详细地覆盖了MySQL运维的各个方面,从基础概念、数据类型、数据库操作、安全加固、实例管理、日志管理等多个维度,为学习者提供了全面的参考资料。对于想要深入学习MySQL的运维人员来说,这份...
MySQLDBA运维笔记是一份针对MySQL数据库管理员(DBA)的工作总结与指南,特别适合于入门级DBA以及对数据库管理感兴趣的初学者。该笔记详细地总结了日常工作中的问题,涵盖了从基础的数据库概念到高级的数据库管理...
在实际使用中,理解并掌握这些知识点能够帮助开发者更好地利用Redis数据库解决实际问题,同时也能够更高效地进行Redis的开发和运维工作。由于Redis的特性和性能优势,使得它在许多高性能应用场合中占据了一席之地。...
在现代微服务架构中,网关(如Spring Gateway)扮演着至关重要的角色,它作为系统的统一入口,负责处理请求路由、认证、限流等任务。...这些技术的结合使得微服务架构更加灵活和可控,为开发和运维提供了强大的支持。
**Redis高可用性详解** Redis,全称Remote Dictionary Server,是一种高性能的键值数据库,广泛应用于缓存、消息中间件、计数等多个场景。为了确保服务的稳定性和可靠性,Redis提供了多种高可用解决方案,其中最...