当前位置: 首页 > news >正文

Redis——数据结构

Redis的五种基本数据类型:String、Hash、List、Set、ZSet

结构类型结构存储值结构读写能力
String字符串、整数或浮点数对整个字符串或字符串的一部分进行操作;对整数或者浮点数进行自增或自减操作
List链表,每个节点上包含一个字符串链表两端进行push或pop操作,读取单个或多个元素;根据值查找或删除元素
Set包含字符串的无序集合字符串集合,包含基础的存在判断、增删改查,还包含计算交集、差集等
Hash包含键值对的无序散列可增删改单个元素
Zset有序集合,value外关联一个分数,用于排序字符串成员与双精度浮点数分数的有序映射;元素的排列顺序由分数的大小决定;包含增删改单个元素以及根据分值范围或者成员来获取元素

随着Redis的更新,后来又增加了四种数据类型:BitMap、HyperLoglog、GEO、Stream。

各类型的应用场景:

  • String:缓存对象、常规计数、分布式锁、共享session信息等。
  • List:消息队列(需要自己实现全局唯一ID,以消费组形式消费数据)
  • Hash:缓存对象
  • Set:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。
  • Zset:排序场景
  • BitMap:二值状态统计的场景,比如签到、判断用户登录状态、连续签到用户总数等。
  • HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页 UV 计数等;
  • GEO(3.2 版新增):存储地理位置信息的场景,比如滴滴叫车;
  • Stream(5.0 版新增):消息队列,相比于基于 List 类型实现的消息队列,有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据。

Zset使用示例:

添加元素并赋值分数

# arcticle:1 文章获得了200个赞
> ZADD user:xiaolin:ranking 200arcticle:1
(integer) 1
# arcticle:2 文章获得了40个赞
> ZADD user:xiaolin:ranking 40arcticle:2
(integer) 1
# arcticle:3 文章获得了100个赞
> ZADD user:xiaolin:ranking 100arcticle:3
(integer) 1
# arcticle:4 文章获得了50个赞
> ZADD user:xiaolin:ranking 50arcticle:4
(integer) 1
# arcticle:5 文章获得了150个赞
> ZADD user:xiaolin:ranking 150arcticle:5
(integer) 1

对某个文章的赞进行自增操作

 ZINCRBY user:xiaolin:ranking 1 arcticle:4
"51"

查看某篇文章的分数

ZSCORE user:xiaolin:ranking arcticle:4
"50"

获取对应分数区间内的文章

ZRANGEBYSCORE user:xiaolin:ranking 100 200WITHSCORES
1) "arcticle:3"
2) "100"
3) "arcticle:5"
4) "150"
5) "arcticle:1"
6) "200"

Zset底层原理:

存储小数据量是使用ziplist(压缩列表)

压缩列表底层:连续两个节点存储分数和value,新增元素时使用插入排序

示例:[socre1][value1][score2][value2]...

存储大数据量时使用跳表+Hash表

跳表的实现原理:

跳表有多个层级,每次添加新元素时会通过随机算法获取0到1的随机数,如果随机数<0.25(概率小于25),则增加一层,然后继续随机生成随机数,直到随机数大于0.25结束。层高最大限制为64。

http://www.xdnf.cn/news/432073.html

相关文章:

  • 精准预测蛋白质稳定性的强大工具
  • 深入理解Python逻辑判断、循环与推导式(附实战案例)
  • 通讯录程序
  • 企业ERP系统软件有哪些品牌?
  • 工业4.0之实时革新RTOS助力德国“灯塔工厂”实现跨域协同
  • 蓝桥杯 10. 全球变暖
  • redis数据结构-09 (ZADD、ZRANGE、ZRANK)
  • 论文解读:Drivestudio——OmniRe: Omni Urban Scene Reconstruction
  • 【漫话机器学习系列】257.填补缺失值(Imputing Missing Values)
  • OpenAI新开源项目Codex CLI提升开发效率的新利器
  • 国自然项目|朱蓓薇院士团队谭明乾教授课题组在ACS Nano(IF=15.8)发表高水平文章!
  • 雅思口语 Part 1 Math
  • 从零开始掌握FreeRTOS(2)链表之节点的定义
  • 虹科干货 | CAN XL安全实践:深度防御下的密钥协商优化
  • 自然语言生成在商业智能中的应用实践
  • Future,Callable,CompletableFuture是什么?
  • 2025年项目管理软件革命:AI与国产化浪潮如何重塑企业协作生态
  • tc qdisc参数详解
  • 智慧校园场景下iVX 研发基座应用实践与行业适配研究
  • Milvus(21):过滤搜索、范围搜索、分组搜索
  • python面试实战经验分享
  • Python 实战:如何智能修改字典中的实体值?
  • 从 Vue3 回望 Vue2:响应式的内核革命
  • 集成设备管理(IDM)
  • Android组件权威解析:Activity与Fragment的深度探索与实战
  • 双种群进化算法:动态约束处理与资源分配解决约束多目标优化问题
  • AI模拟了一场5亿年的进化
  • Python Django基于模板的药品名称识别系统【附源码、文档说明】
  • 支付宝小程序开发指南
  • servlet-api