我是新来的。我用expire将过期时间设置为48小时。
from datetime import timedelta
r = redis.Redis(host=some aws entrypoint, charset="utf-8", decode_response
s=True)
r.hset("key", "field", "value")
result = r.expire("key", timedelta(minutes=(60 * 48)))
print("expire: " + str(self._r.ttl("key")), file=sys.stderr)
结果将返回true。它将按预期打印出“172800”。
但是,大约2小时后,如果在此期间不能访问同一个密钥,ttl将返回-2。如果我经常使用同一个键,ttl将按预期工作(例如“168849”)。如果有人能给我解释一下原因会很有帮助的。我需要钥匙在48小时后过期。谢谢!
1条答案
按热度按时间9lowa7mx1#
返回结果“-2”表示密钥不再存在。
因此,它要么被您的代码删除,要么被redis自动逐出。如果您确定您的代码没有删除它,只需启动一个新的redis,再次执行相同的操作,然后在redis cli中,输入
信息统计
在输出中,检查逐出的\u键,它表示“由于maxmemory限制而逐出的键数”。所以如果它是1,你知道这是最大内存限制的问题。然后输入
信息存储器
检查已用的内存和最大内存。
如果executed\u keys=0但expired\u keys=1,您就知道密钥以某种方式过期了。
然后您可以使用monitor命令来监视redis服务器,并再次进行测试,这一次,检查您的redis客户机库到底向redis服务器发出了什么,例如,是否正确设置了过期时间。