redis丢失键值的几种情况

大致总结一下redis丢失键值的情况一般为以下几种情况:
1. 是否有大量过期key被清理
分析:
原因:这种情况并不是真正的“丢失”键值,只是达到了设置的key的过期值
应对方案:根据项目情况设置合理的键值过期时间,或者设置为不过期,对不使用的key进行删除
2. 是否maxmemory不足导致redis自动清理部分key以节省空间
分析:
原因:redis内存使用达到设置的可用内存的上限,redis自动清理部分key已节省空间给新的key使用
应对方案:适当的调大maxmemory
3. 主库故障后自动重启
分析:
原因:主库由于某种原因挂掉,但是在redis哨兵发现并启动切换之前被监控程序重启,如果主库有完整的备份策略,则丢失重启之前的一小段时间的数据,如果主库为了性能没有设置备份策略,则可能重启之后成为一个空的库,一段时间后,从库发现主库的runid发生变化,自动同步主库,导致数据丢失严重
应对方案:

1、建议对主库使用至少一种持久化策略,即使频率低
2、如果没有完整的持久化策略不建议使用自动重启操作,特别是在redis集群方案中,因为在集群方案中使用哨兵的判断和操作是最安全的

4. 网络分区的问题,可能导致短时间的写入数据丢失
分析:
原因:网络不稳定导致的短时写入失败或触发哨兵的自动切换(单独的主备方案触发切换期间会有数据丢失)
应对方案:保障网络环境稳定可达

  1. 由于网络等原因导致主从复制数据不一致,发生故障切换后,出现数据丢失
    分析:略
  2. 业务逻辑bug或者代码bug导致误删除
    分析:
    原因:代码运行中有对key的删除操作,导致误删了不该删除的key
    应对方案:改代码

ps:故障的排查更多的靠监控的精细度,如内存使用百分比的监控,对删除命令的监控,过期key的数量监控,slowlog的监控(大量key的查找和删除会被记录)等等

    原文作者:进击的胖达
    原文地址: https://www.jianshu.com/p/94ce8f03fe01
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞