【问题标题】:AWS redis set expire doesn't work properlyAWS redis set expire 无法正常工作
【发布时间】:2020-07-12 17:44:18
【问题描述】:

我是 AWS Redis 的新手。我用expire设置过期时间为48h。

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 小时后过期。谢谢!

【问题讨论】:

  • 你能分享更多细节吗?您是否仅使用此值测试空的 redis 缓存?您是否使用基于 LRU 的策略?更多信息:redis.io/topics/lru-cache
  • 感谢您的回复。这是一个新的 Redis 节点。未达到最大内存。我猜不应该触发 LRU 策略。

标签: amazon-web-services redis


【解决方案1】:

返回结果“-2”表示key不存在了。

所以它要么被你的代码在某处删除,要么被 Redis 自动驱逐。如果你确定你的代码没有删除它,只需启动一个新的 redis,再做同样的事情, 然后在 redis-cli 中,输入

信息统计

在输出中,检查 evicted_keys ,它的意思是“由于 maxmemory 限制而被驱逐的键数”。所以如果它是 1,你就知道这是 maxmemory 限制问题。 然后输入

信息记忆

检查您的 used_memory 和 maxMemory。

如果 evicted_keys=0 但 expired_keys=1,您知道密钥已过期。

然后你可以使用monitor命令来监控Redis服务器,再做一次测试,这一次,检查你的redis-client库到底向Redis服务器发出了什么,例如, 如果过期时间设置正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多