Skip to content

Redis使用建议

Redis使用规范(建议)

  • 保证可读性的情况下,尽量缩短键值对的存储长度,大K影响性能
  • 设置键值的过期时间(包含长期有效的,可以尽量设置较长的TTL)
  • 禁用长耗时的查询命令(如 keys)
  • 通过合理的设计,严格控制hash、set、sorted set等结构的数据大小
  • 删除大数据的时候,可用unlink替代del,启动一个新的线程来异步删除数据
  • 需要批量处理数据室,可使用pipeline提高效率
  • 尽量使用redis连接池,而不是频繁的创建、销毁redis连接
  • 限制redis内存大小,并根据业务情况选择合适的内存淘汰策略
  • 尽量使用物理机而非虚拟机,包括docker

常见问题及处理方式

  • 缓存雪崩

    • 问题描述
      • 大面积缓存在极短时间内失效,导致短时间内大量请求直接到数据库
    • 解决方法
      • 缓存失效的时间,加或减一定随机值
      • 缓存设置较长的有效期,根据业务主动更改或删除缓存
      • 限流,避免极短时间内处理大量请求,保证部分用户服务可用
  • 缓存穿透

    • 问题描述
      • 大量请求的key不在缓存中,导致请求直接到数据库
    • 解决方法
      • 严格校验请求参数,将不合理的请求直接过滤
      • 如果数据不存在,可缓存空数据(零值数据)
  • 缓存击穿

    • 问题描述
      • 热点数据存储到期,大量请求直接到数据库
    • 解决方法
      • 设置较长的过期时间,主动更新数据
  • 如何保证缓存和数据库的一致性(ac/bc组合使用,降低性能【同步重试】或者达到最终一致【异步重试】)

    • 更新数据库+更新缓存
    • 更新数据库+删除缓存
    • 重试机制 【同步重试+异步重试】