Redis最佳实践 | kikoroc
- -redis是一款开源的内存数据存储系统,可以用作数据库、缓存甚至是消息中间件(pub/sub)来使用. 与memcache相比,redis支持更多的数据结构,比如string,hash,list,set,bit map,sorted set甚至是geo等等,基本覆盖了日常开发中使用到的数据结构. 而且redis十分高效,当然是建立在合理使用的前提下.
Redis是业界流行的缓存组件,为了规范Redis缓存的使用,避免落入各种问题陷阱,特此编写了此开发规范。本规范结合实际情况,描述了需要遵守的Redis最佳使用规约,及其供参考的最佳实践,供研发团队在项目开发中使用。
本文将出现如下规约术语,其中根据约束力强弱,规约分别有如下三级,
【强制】必须遵守的规约
【推荐】推荐遵守的规约,若无特殊情况,需要遵守该规约
【参考】参考遵守的规约,团队根据实际情况,可以选择性的遵守
每一个规约,根据情况,将有如下附加说明,
【推荐】对于列表键(Hash、List、Set、Zset),尽量控制元素个数不超过千万数量级,若大于这个数量级,建议通过键值切分列表。
【推荐】建议List当做队列来使用。
【推荐】业务应用尽量不在Redis存储持久状态,并且需要考虑和实现键值随时失效时的数据更新方法。
【推荐】对于键值,建议设置随机失效时间,避免同一时间大量键值失效,从而导致的缓存雪崩问题。
【推荐】对于O(N)时间复杂度的Redis命令,在使用时要预估N的大小,建议N不大于1000。
【推荐】选择RDB的数据持久化方式。
save 900 1 # 每900秒检查一次数据变更情况,如果发生了1次或以上的数据变更,则进行RDB快照保存
save 300 10 # 每300秒检查一次数据变更情况,如果发生了10次或以上的数据变更,则进行RDB快照保存
save 60 10000 # 每60秒检查一次数据变更情况,如果发生了100次或以上的数据变更,则进行RDB快照保存
maxmemory 4000mb
maxmemory-policy volatile-lru # 默认是noeviction,即不进行数据淘汰
slowlog-log-slower-than 10000 # 执行时间慢于10毫秒的命令计入慢查询日志
slowlog-max-len 1024 # 慢查询日志记录长度
【强制】定时监控慢查询,对于慢查询操作进行分析并解决,避免再次发生。
【推荐】定时分析Redis big keys,避免占用空间大的Redis健值,合理拆分。
【推荐】定时分析Redis内存空间使用情况,通过RDB快照获取内存空间,查出占用空间大的键值,并进行拆分修复。