Redis 列表无缘无故被清空?



我在python中消耗了这样的redis列表:

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

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

Redis 中没有空列表这样的东西,如果列表一直被 RPOP,则密钥将被删除。

因此,应该发生以下情况之一:

  1. 列表mylist被清空(LPOP,RPOP,LREM,LTRIM等(,直到空。
  2. 正在删除密钥mylist(DEL、取消链接等(
  3. 密钥mylist即将过期(过期、过期等(
  4. 密钥正在被驱逐
  5. 发生数据丢失

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

查看您的服务器中是否设置了一些带有CONFIG GET maxmemory-policy的逐出策略。

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

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

最新更新