redis常用数据类型之有序集合
2023-09-11 14:19:18 时间
专栏目录请点击
简介
- 有序集合和普通的集合非常像,都是一个没有重复元素的字符串集合
- 但是有序结合每一个成员都有一个属性叫做评分(score),这个评分被用来按照从最低分到最高分的方式排序集合中的成员(集合成员是唯一的,但是评分可以重复)
- 也可以根据评分或者次序来获取一个范围内的元素
操作
增
zadd <key><score1><value1><score2><value2>…
:将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
删
zrem <key><value>
删除该集合下,指定值的元素
查
zrange <key><start><stop> [WITHSCORES]
:返回有序集 key 中,下标在<start><stop>
之间的元素,带WITHSCORES
,可以让分数一起和值返回到结果集。zrangebyscore key minmax [withscores] [limit offset count]
:返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
zrevrangebyscore key max min [withscores] [limit offset count]
:与上面的类似,只不过是从大到小进行排列的
zcount <key><min><max>
统计该集合,分数区间内的元素个数
zrank <key><value>
返回该值在集合中的排名,从0开始
改
zincrby <key><increment><value>
为元素的score
加上增量
数据结构
- 有序集合是一种非常特别的数据结构,它类似于对象,对象中键是有序集合的值,值为有序结合的分数
- 他底层使用了两个数据结构
- hash,hash的作用是管能量元素
value
和权重score
,保障元素的唯一性,可以通过元素value找到相应的score的值 - 跳跃表,跳跃表的目的是在于给元素vaule排序,根据score的范围获取元素列表
- hash,hash的作用是管能量元素
跳跃表
有序链表
我们先看看有序链表
如果我们要查找51的元素,那么他需要从第一个元素开始依次查找,一共需要六次
跳跃表
我们观看跳跃表的结构,如果要查找51的节点,那么,进行如下的查找步骤
- 从第2层开始,1节点比51节点小,那么会向后进行比较
- 21节点比51节点小,继续向后比较,但是就到null了,所以这里就从第2层的21节点移到下一层的21节点
- 并向后比较,在第一层41节点比51节点小,
- 继续向后比较,61节点比51节点大,所以再向下移动一层,在,好到了51节点
前后一共比较了4次
相关文章
- 如何在redis中获取占用空间比较大的key?
- Another Redis Desktop Manager 链接redis,redis集群链接后用显示不全的问题
- [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
- redis配置文件详解
- Redis开发与运维. 2.5 集合
- Redis开发与运维. 2.6 有序集合
- Tomcat redis 配置
- Redis第十二讲 Redis之zset底层数据结构实现
- 终于把Redis中7千万个Key删完了
- redis常用命令大全
- 面试题:Redis常见性能问题和解决方案?
- 安装redis集群报错
- springmvc整合redis架构搭建实例
- 《Redis入门指南(第2版)》一3.6 有序集合类型
- Redis Desktop Manager无法连接虚拟机中启动的redis服务问题排查步骤
- 限流redis+lua
- Redis的持久化数据
- 通过MySQL自动同步刷新Redis
- Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级
- Redis学习---Redis操作之有序集合
- 【转】Redis概念原理、redis面试
- 曹工说Redis源码(4)-- 通过redis server源码来理解 listen 函数中的 backlog 参数
- 曹工说Redis源码(3)-- redis server 启动过程完整解析(中)
- 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果
- redis的三种启动方式
- 【docker】启动redis 的时候报错 :Error response from daemon: Container xxx is not running