我想使用NodeJS中的redis库在Redis的hset特定键中设置Expiry

问题描述 投票:1回答:2

我在Redis中设置了一个哈希。

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

client.hset("emailVerification", "[email protected]", "token_1");
client.hset("emailVerification", "[email protected]", "token_2");

现在,我想在emailVerification哈希集中将[email protected]设置为24小时到期时间。因此,它会在24小时后过期并从哈希中删除。

node.js redis hashset
2个回答
2
投票

可悲的是,Redis不支持这种操作。 EXPIRE命令仅适用于键,并且哈希操作不会重置计时器。

仅通过删除或覆盖键内容的命令(包括DEL,SET,GETSET和所有* STORE命令)才能清除超时。这意味着在概念上更改存储在键上的值而不用新键替换的所有操作将使超时保持不变。例如,使用INCR增加键的值,使用LPUSH将新值推入列表,或使用HSET更改哈希的字段值,所有这些操作都将使超时保持不变。

这是一个简单的概念证明。

EXPIRE

有几种方法可以实现您的目标:

将电子邮件或基于电子邮件的某些哈希用作键,例如$ { > 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哈希为[email protected]

c0d0a32c405c68cb538e3891a3e3bce98887f012

或将过期作为元数据添加到您的哈希中,您必须存储一些JSON或其他结构化形式,而不是普通令牌:

SET emailVerificationc0d0a32c405c68cb538e3891a3e3bce98887f012 token1
EXPIRE  emailVerificationc0d0a32c405c68cb538e3891a3e3bce98887f012 86400

然后您可以设置一些自动过程来清理旧条目。并在尝试验证电子邮件时检查到期时间。


0
投票

是的,不可能为hashKey设置过期,您可以使用来放置顶部标签密钥的过期。

BoundValueOperations boundOperations = redisTemplate.boundValueOps(“ Key”);boundOperations.expire(“ Key”,TimeUnit.MINUTES);

© www.soinside.com 2019 - 2024. All rights reserved.