Redis合集
·
giftia
持久化策略
- RDB:快照备份,二进制,占用小恢复快,数据缺口大
- AOF:操作日志,纯文本易读,占用大恢复慢
- 一般定期 rdb,间隔 aof
aof 重写
- 时机:aof 文件过大时
- 触发:手动或阈值自动或定时
- 规则:去掉无效命令,合并命令结果,比如 set 1,set 2… set 100,最后只留下 set 100
常见数据结构和使用场景
- string:缓存对象、分布式锁、session、计数器
- hash:键值对象(用户信息、购物车)
- list:简易消息队列、最新消息/时间线
- set:去重、共同好友、标签、抽奖
- zset:排行榜、延时队列、热度排序
缓存穿透
传缓存不存在的值,请求直接打到数据库
- 参数校验
- 缓存空值,设置短 ttl
- 布隆过滤器
缓存击穿
热 key 突然过期,大量请求打到数据库
- 设置热 key 永不过期
- 加锁排队,让请一个请求到数据库并更新缓存
缓存雪崩
大量 key 同时过期
- 短范围内设置随机过期时间
- 降级限流
pipeline
让多条操作一次性发送到 redis 服务器,减少 rtt
pipline 事务 lua
- pipline:一次 rtt,但不保证原子性
- 事务:多次 rtt,执行不被打断,但不能回滚(与 mysql 事务的区别)
- lua:一次 rtt,保证原子性