Redis使用建议
Redis使用规范(建议)
- 保证可读性的情况下,尽量缩短键值对的存储长度,大K影响性能
- 设置键值的过期时间(包含长期有效的,可以尽量设置较长的TTL)
- 禁用长耗时的查询命令(如 keys)
- 通过合理的设计,严格控制hash、set、sorted set等结构的数据大小
- 删除大数据的时候,可用unlink替代del,启动一个新的线程来异步删除数据
- 需要批量处理数据室,可使用pipeline提高效率
- 尽量使用redis连接池,而不是频繁的创建、销毁redis连接
- 限制redis内存大小,并根据业务情况选择合适的内存淘汰策略
- 尽量使用物理机而非虚拟机,包括docker
常见问题及处理方式
缓存雪崩
- 问题描述
- 大面积缓存在极短时间内失效,导致短时间内大量请求直接到数据库
- 解决方法
- 缓存失效的时间,加或减一定随机值
- 缓存设置较长的有效期,根据业务主动更改或删除缓存
- 限流,避免极短时间内处理大量请求,保证部分用户服务可用
- 问题描述
缓存穿透
- 问题描述
- 大量请求的key不在缓存中,导致请求直接到数据库
- 解决方法
- 严格校验请求参数,将不合理的请求直接过滤
- 如果数据不存在,可缓存空数据(零值数据)
- 问题描述
缓存击穿
- 问题描述
- 热点数据存储到期,大量请求直接到数据库
- 解决方法
- 设置较长的过期时间,主动更新数据
- 问题描述
如何保证缓存和数据库的一致性(ac/bc组合使用,降低性能【同步重试】或者达到最终一致【异步重试】)
- 更新数据库+更新缓存
- 更新数据库+删除缓存
- 重试机制 【同步重试+异步重试】