Daily Plan
更新: 1/28/2026 字数: 0 字 时长: 0 分钟
#todo
- [ ]
Daily Study
更新: 1/28/2026 字数: 0 字 时长: 0 分钟
关于Redis的学习
#redis
基础理论
在学习基础概念的时候,经常会看到有==随机采样==的字段,由于数据量大,在任何增删改查的算法中,第一步是进行随机采样,然后对这些采样的数据进行操作。
数据结构
Redis 五种数据类型的应用场景:
- String 类型的应用场景:缓存对象、常规计数、分布式锁、共享session信息等。
- List 类型的应用场景:消息队列(有两个问题:1. 生产者需要自行实现全局唯一 ID;2. 不能以消费组形式消费数据)等。
- Hash 类型:缓存对象、购物车等。
- Set 类型:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。
- Zset 类型:排序场景,比如排行榜、电话和姓名排序等。
Redis 后续版本又支持四种数据类型,它们的应用场景如下:
- BitMap(2.2 版新增):二值状态统计的场景,比如签到、判断用户登陆状态、连续签到用户总数等;
- HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页 UV 计数等;
- GEO(3.2 版新增):存储地理位置信息的场景,比如滴滴叫车;
- Stream(5.0 版新增):消息队列,相比于基于 List 类型实现的消息队列,有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据。
底层数据结构:
- SDS:替代 C 字符串,支持动态扩容、O (1) 获取长度、避免缓冲区溢出。
- 压缩列表(ziplist):紧凑的连续内存结构,节省内存,适合小数据量场景。
- 跳表(skiplist):多层有序链表,O (logN) 时间复杂度实现有序集合的增删改查。
- 哈希表(hashtable):数组 + 链表,解决哈希冲突,支持快速查找。
- 快速列表(quicklist):ziplist 的双向链表,结合 ziplist 的内存优势和链表的操作优势。
Redis Clustre 分片传输和一致性哈希问题
分片传输:Redis Cluster 采用数据分片(槽位) 机制,将 16384 个槽位(0-16383)分配到不同节点,数据通过CRC16(key) & 16383 计算槽位,定位到对应节点。客户端直连目标节点,节点间通过Gossip 协议 同步槽位信息、节点状态;数据迁移时,通过migrate命令原子性传输键值对,保证迁移过程中数据可访问。
