AWS срок действия redis set не работает должным образом - PullRequest
0 голосов
/ 10 июля 2020

Я новичок в AWS Redis. Я использовал 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 Ответ

0 голосов
/ 12 июля 2020

Результат возврата «-2» означает, что ключ больше не существует.

Таким образом, он либо удален вашим кодом где-то, либо автоматически удален Redis. Если вы уверены, что ваш код не удалял это, просто запустите fre sh redis, сделайте то же самое снова, затем в redis-cli введите

info stats

В выводе проверьте evicted_keys , это означает «Количество удаленных ключей из-за ограничения maxmemory». Так что, если это 1, вы знаете, что это проблема с ограничением maxmemory. Затем введите

info memory

Проверьте свой used_memory и maxMemory.

Если evicted_keys = 0, но expired_keys = 1, вы знаете, что ключ каким-то образом Срок действия истек.

Затем вы можете использовать команду monitor для мониторинга сервера Redis и повторить тест, на этот раз проверьте, что именно делает ваш redis-клиент ошибка библиотеки на сервере Redis, например, если время истечения срока действия установлено правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...