Redis 列表无故清空?

Redis list getting emptied without any reason?

我正在 python 中使用这样的 redis 列表:

listitem = r.rpoplpush('mylist','mylist')

奇怪的是,列表随机变空 - 例如它可以工作一个月而不会被清空,然后在一个晴朗的日子被清空?我在这里错过了什么?我的脚本中没有其他语句以任何方式触及脚本。

Redis 中不存在空列表,如果一个列表一直被 RPOP,则键被删除。

所以,其中一个应该发生:

  1. 列表 mylist 正在清空(LPOP、RPOP、LREM、LTRIM 等)直到清空。
  2. 正在删除密钥 mylist(DEL、UNLINK 等)
  3. 密钥 mylist 即将过期(EXPIRE、EXPIREAT 等)
  4. 正在逐出密钥
  5. 正在发生数据丢失

如果没有 redis-client 正在触摸键 (1-3),则它必须是 4 或 5。

查看您的服务器中是否有一些 eviction policy 设置为 CONFIG GET maxmemory-policy

如果您没有 persistence 并重新启动服务器,则可能会发生数据丢失。或者,如果您使用多个实例(集群或哨兵)并且出现问题。可以使用INFO命令查看:

  • 服务器部分:redis_modeuptime_in_days
  • 持久性部分:如果正常运行时间表明服务器在您丢失密钥时重新启动,则相关。
  • 内存和统计部分:maxmemory_policyevicted_keys 将告诉我们是否正在应用策略
  • 复制和集群部分:如果我们仍然没有线索,请开始调查此地点。