Redis核心数据结构与底层实现

 5种基础数据结构

  1. String 字符串
  2. list 列表
  3. hash 字典
  4. set 集合
  5. zset 有序集合

deepseek的回答

String

内部编码

redis根据当前值的类型和长度决定使用哪种内部编码,共3种内部编码:

  • int :value为整数时
  • embstr : 短字符串(长度<= 44字节)
  • raw :长度 > 44字节

embstr:embstr 利用 jemalloc 的 64 字节内存块,连续存放 redisObject(16 字节)和 SDS 头(3 字节)+ 字符串内容(44 字节)+ 结束符(1 字节)。

rawredisObject 和字符串数据(SDS,Simple Dynamic String)分开存储

应用场景

计数器(如视频播放数计数)

incr key : 对值做自增操作

可以实现快速计数,查看缓存,同时异步落地到其他数据源。

共享session
图源:《redis开发与运维》付磊 张益军编著缓存
图源:《redis开发与运维》付磊 张益军编著限速

每分钟获取验证码的频率,同一ip每秒钟访问不得超过n次等

设置key的过期时间: set key value EX 60 NX

Hash

内部编码

  • ziplist / listpack (Redis 7.0 后,ziplist 被 listpack 替代(解决 ziplist 连锁更新问题),但逻辑类似。)
  • hashtable

List

内部编码

ziplist/linkedlist → quicklist(ziplist 节点) → quicklist(listpack 节点)

Set

内部编码:listpack

zset

内部编码

  • ziplist / listpack
  • skiplist

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值