giftiaのblog

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,保证原子性