Redis 核心知识体系总结
Redis 核心知识体系总结
一、数据类型与应用场景
Redis 提供了丰富的数据结构,不仅仅是 key-value
存储:
-
String
- 二进制安全,最大支持 512MB
- 应用:缓存对象、计数器、分布式 ID
-
List
- 双向链表结构
- 应用:消息队列(
lpush
/rpop
)、时间线
-
Hash
- 类似
map
,存储对象属性 - 应用:用户信息存储
- 类似
-
Set
- 无序集合,支持交集/并集/差集
- 应用:去重、共同好友
-
Sorted Set (ZSet)
- 有序集合,基于跳表实现
- 应用:排行榜、延时队列
二、持久化机制
Redis 的数据主要存在内存中,但提供两种持久化方案:
-
RDB(快照)
- 周期性生成数据快照,保存到磁盘
- 优点:文件紧凑、恢复快
- 缺点:可能丢失最后一次快照之后的数据
-
AOF(追加日志)
- 每次写操作追加到日志文件
- 优点:数据更安全,可配置
everysec
、always
- 缺点:文件体积大,需要定期重写
最佳实践:生产环境通常同时开启 RDB + AOF,兼顾安全性和恢复效率。
三、缓存异常与解决方案
在实际使用中,Redis 常见的三大缓存异常问题:
-
缓存穿透:查询不存在的数据,直接打到数据库
- 解决:布隆过滤器、缓存空值
-
缓存击穿:热点 key 过期,大量请求同时打到数据库
- 解决:互斥锁、逻辑过期
-
缓存雪崩:大量 key 同时过期,导致数据库被压垮
- 解决:随机过期时间、分级缓存
四、内存淘汰策略
当内存不足时,Redis 提供多种淘汰策略(maxmemory-policy
):
-
noeviction:直接报错(默认)
-
volatile-xxx:只对设置过期时间的 key 进行淘汰
-
allkeys-xxx:对所有 key 淘汰
lru
(最近最少使用)、lfu
(最不经常使用)、random
常见选择:allkeys-lru
,在缓存场景中效果较好。
五、事务与脚本
Redis 提供了事务机制,但与关系型数据库不同:
- 事务 (MULTI/EXEC):一次性执行多条命令,不支持回滚
- Lua 脚本 (EVAL):保证原子性,常用于分布式锁、复杂操作
六、分布式锁设计
Redis 也常用来实现分布式锁:
-
SETNX + EXPIRE
- 基本实现,存在过期时间和原子性问题
-
SET key value NX PX ttl
- 推荐写法,保证原子性
-
Redlock 算法
- 多节点部署,保证更高容错性
- 但在社区中仍存在争议,适合场景需谨慎
注意点:分布式锁要考虑过期续约(如 Redisson 的 watchdog 机制)。
七、内存优化与运维
-
减少内存占用
- 使用合适的数据结构(如
hash
存小对象,减少 key 数量) - 开启压缩选项(如
listpack
、intset
)
- 使用合适的数据结构(如
-
监控与优化
info
查看内存占用- 使用
slowlog
监控慢查询