В Redis, как мы можем удалить, если ключ не используется в течение некоторого времени - PullRequest
0 голосов
/ 14 июля 2020

В Redis я сначала сохраняю ключ vaue. Я проверю, присутствует ли ключ в последующем запросе, используя команду GET для получения значения. Если к ключу не обращаются в течение определенного времени, например 60 минут, ключ следует удалить. иначе должно быть только так. Итак, как мы можем достичь этого требования. Я знаю, что функция TTL присутствует в Redis, но она будет удалена по истечении указанного времени, но я хотел, чтобы ключ удалялся только в том случае, если к нему не обращались в течение 60 минут, как это.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Если вы можете сохранить свои данные в виде пары ключ-значение, например STRING, вместо HA SH. Вы можете достичь цели с помощью команды SET и сценария Lua:

Set Operation

Если вам нужно установить пару ключ-значение, также укажите TTL, чтобы гарантировать отсутствие доступа в течение 60 секунд, ключ будет удален автоматически:

SET key value EX 60

Get Operation

При попытке получить значение, если существует ключ, также сбросьте его TTL до 60 с помощью сценария Lua:

-- get.lua
local key = KEYS[1]
local val = redis.call("get", key)
if (val) then
    redis.call("expire", key, 60)
end
return val

ПРИМЕЧАНИЕ : если вы не хотите каждый раз указывать TTL с помощью команды SET, или ваша версия Redis не поддерживает параметр EX, вы также можете заключить команды SET и EXPIRE в сценарий Lua.

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

TTL в redis не может быть установлен для каждого KEY в hset, только для всего набора Причина в том, что реализация была бы сложной, и создатели redis хотели сохранить ее как можно проще.

Вот некоторые обходные пути:

  1. Вместо hset используйте набор / получение верхнего уровня с командами TTL / EXPIRE
  2. в значении сохраните время истечения срока действия, когда вы получите значение, также обновите срок действия время, выполните команду удаления от клиента, который получает ключ / значение и обнаруживает, что срок действия должен уже истек
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...