我在python
中消耗了这样的redis
列表:
listitem = r.rpoplpush('mylist','mylist')
奇怪的是,列表随机变空 - 例如,它会工作一个月而不会被清空,然后一个晴朗的一天被清空?我在这里错过了什么?我的脚本中没有其他语句以任何方式触及脚本。
Redis 中没有空列表这样的东西,如果列表一直被 RPOP,则密钥将被删除。
因此,应该发生以下情况之一:
- 列表
mylist
被清空(LPOP,RPOP,LREM,LTRIM等(,直到空。 - 正在删除密钥
mylist
(DEL、取消链接等( - 密钥
mylist
即将过期(过期、过期等( - 密钥正在被驱逐
- 发生数据丢失
如果没有 redis-client 触摸键 (1-3(,则它必须是 4 或 5。
查看您的服务器中是否设置了一些带有CONFIG GET maxmemory-policy
的逐出策略。
如果没有持久性并且服务器重新启动,则可能会发生数据丢失。或者,如果您使用多个实例(集群或哨兵(并且出现问题。您可以使用INFO
命令查看:
- 服务器部分:
redis_mode
和uptime_in_days
。 - 持久性部分:如果正常运行时间表明服务器在您丢失密钥时重新启动,则相关。
- 内存和统计部分:
maxmemory_policy
和evicted_keys
将告诉我们是否正在应用策略 - 复制和群集部分:如果我们仍然没有线索,请开始调查此地点。