aws redis set expire无法正常工作

eivgtgni  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(346)

我是新来的。我用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小时后过期。谢谢!

9lowa7mx

9lowa7mx1#

返回结果“-2”表示密钥不再存在。
因此,它要么被您的代码删除,要么被redis自动逐出。如果您确定您的代码没有删除它,只需启动一个新的redis,再次执行相同的操作,然后在redis cli中,输入
信息统计
在输出中,检查逐出的\u键,它表示“由于maxmemory限制而逐出的键数”。所以如果它是1,你知道这是最大内存限制的问题。然后输入
信息存储器
检查已用的内存和最大内存。
如果executed\u keys=0但expired\u keys=1,您就知道密钥以某种方式过期了。
然后您可以使用monitor命令来监视redis服务器,并再次进行测试,这一次,检查您的redis客户机库到底向redis服务器发出了什么,例如,是否正确设置了过期时间。

相关问题