redis 深度历险学习笔记

0. 开卷有益

redis 实际应用场景,以社区贴子为例:

  1. 记录帖子的点赞数、评论数和点击数 hash
  2. 记录用户帖子 ID 列表排序,快速显示用户的帖子列表 zset
  3. 帖子摘要信息,用于列表页展示 hash
  4. 帖子点赞用户列表,评论 ID 列表,用于去重计数 zset
  5. 近期热帖缓存,减少数据库压力 hash
  6. 记录相关忒自 ID,简单关联推荐 list
  7. 帖子 ID 自增,分配帖子 ID list
  8. 收藏集和帖子的关系 zset
  9. 热帖、榜单、分类榜单 zset
  10. 缓存用户行为,恶意行为过滤 zset, hash

redis 有五种基础结构:

  1. 字符串 string
    • 类似 ArrayList,长度小于 1M 每次扩容翻倍,超过 1M 以后每次扩容只增加 1M,最大长度 512M
  2. 列表 list
    • 类似 LinkedList,当列表元素较少时使用连续内存是 ziplist,当数据量较多改为 quicklist
  3. 集合 set
    • 类似 HashSet,相当于特殊的 hash,其所有的 value 都是 NULL
  4. 哈希 hash
    • 类似 HashMap,数据+链表组成,碰撞元素用链表串接,采用渐进式 rehash
  5. 有序集合 zset
    • 类似 SortedSet 和 HashMap 的结合体,通过跳跃列表实现

redis 两条通用规则:

  1. create if not exists
  2. drop if no elements

1. 应用

1.1 分布式锁

1.2 延迟队列

1.3 位图

1.4 HyperLogLog

1.5 布隆过滤器

1.6 简单限流

1.7 漏斗模型

1.8 GeoHash

1.9 Scan

2. 原理

2.1 线程 IO 模型

2.2 通信协议

2.3 持久化

2.4 管道

2.5 事务

2.6 PubSub

2.7 小对象压缩

2.8 主从同步

3. 集群

3.1 Sentinel

3.2 Codis

3.3 Cluster

4. 扩展

4.1 Stream

4.2 Info

4.3 再谈分布式锁

4.4 过期策略

4.5 LRU

4.6 懒删除

4.7 Jedis

4.8 保护 Redis

4.9 安全通信

5. 源码

5.1 字符串

5.2 字典

5.3 压缩列表

5.4 快速列表

5.5 跳跃列表

5.6 紧凑列表

5.7 基数树