Я хочу установить Expiry в ключе hset в Redis, используя библиотеку redis в NodeJS - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть один хэш, установленный в Redis.

const redis = require("redis");
let client = redis.createClient('host', 'port', 'password', 'db');

client.hset("emailVerification", "abc@gmail.com", "token_1");
client.hset("emailVerification", "xyz@gmail.com", "token_2");

Теперь я хочу установить срок действия 24 часа на abc@gmail.com в emailVerification хэш-набор.Итак, через 24 часа он истечет и будет удален из хеша.

1 Ответ

0 голосов
/ 05 февраля 2019

К сожалению, 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"}'

Затем вы можете настроить автоматический процесс очистки старых записей.А также проверьте срок действия при попытке подтвердить электронную почту.

...