К сожалению, Redis не поддерживает такую операцию.Команда EXPIRE
работает только с ключами, а операции хеширования не сбрасывают таймер.
Время ожидания будет сбрасываться только командами, которые удаляют или перезаписывают содержимоеключ, включая DEL, SET, GETSET и все команды * STORE.Это означает, что все операции, которые концептуально изменяют значение, хранящееся в ключе, не заменяя его новым, оставят тайм-аут без изменений.Например, увеличение значения ключа с помощью INCR, добавление нового значения в список с помощью LPUSH или изменение значения поля хэша с помощью HSET - это все операции, которые не изменяют время ожидания.
Это простое доказательство концепции.
$ {
> redis-cli hset myhash key1 one
> redis-cli expire myhash 5
> sleep 2
> redis-cli hset myhash key2 two
> sleep 4
> redis-cli dump myhash
> }
(integer) 1
(integer) 1
(integer) 1
(nil)
Есть несколько способов достичь вашей цели:
Используйте электронную почту или какой-либо хэш на основе электронной почты в качествеключ, например, SHA1 хэш abc@gmail.com
равен c0d0a32c405c68cb538e3891a3e3bce98887f012
:
SET emailVerificationc0d0a32c405c68cb538e3891a3e3bce98887f012 token1
EXPIRE emailVerificationc0d0a32c405c68cb538e3891a3e3bce98887f012 86400
или добавьте срок действия в качестве метаданных к вашему хешу, вам нужно будет сохранить некоторую JSON или другую структурированную форму вместопростой токен:
HSET myhash abc@gmail.com '{"token":"token1", "expiration": "20190205T09:00"}'
Затем вы можете настроить автоматический процесс очистки старых записей.А также проверьте срок действия при попытке подтвердить электронную почту.