如何在Redis中“过期”HSET子键?

188

我需要过期所有在Redis哈希表中超过1个月的键。

13个回答

1
你可以。这里是一个例子。
redis 127.0.0.1:6379> hset key f1 1
(integer) 1
redis 127.0.0.1:6379> hset key f2 2
(integer) 1
redis 127.0.0.1:6379> hvals key
1) "1"
2) "1"
3) "2"
redis 127.0.0.1:6379> expire key 10
(integer) 1
redis 127.0.0.1:6379> hvals key
1) "1"
2) "1"
3) "2"
redis 127.0.0.1:6379> hvals key
1) "1"
2) "1"
3) "2"
redis 127.0.0.1:6379> hvals key

使用 EXPIREEXPIREAT 命令。
如果您想使哈希中特定键的过期时间早于 1 个月,这是不可能的。 Redis 的 expire 命令适用于哈希中的所有键。 如果您设置了每日哈希键,则可以设置键的生存时间。
hset key-20140325 f1 1
expire key-20140325 100
hset key-20140325 f1 2

29
我认为他并不想使哈希表中的所有密钥过期,而是只有那些超过一个月的密钥才会过期,因此只有其中的一些密钥会过期。据我所知,这是不可能的。 - UpTheCreek
2
在我看来,这个问题让我们假设了一些东西。所以乔纳森得到了我的赞赏,因为他帮助了我!谢谢! - Chris W.
你如何使"f1"和"f2"过期? - vgoklani
6
这并没有回答问题或提供任何帮助。需要过期散列表中的元素,而不是整个散列表。 - Ron
@UpTheCreek 谢谢! - Jonathan Kim

0
您可以使用Redis Keyspace通知,通过使用psubscribe"__keyevent@<DB-INDEX>__:expired"。每当一个键过期时,将在您的redis连接上发布一条消息。
关于您的问题,基本上您需要使用set创建一个具有以秒/毫秒为单位的到期时间的临时“普通”键。它应该与您希望从集合中删除的键的名称匹配。
由于您的临时键将在其到期时通过"__keyevent@0__:expired"发布到您的redis连接中,因此您可以轻松地从原始集合中删除您的键,因为该消息将具有键的名称。
实际上,在https://medium.com/@micah1powell/using-redis-keyspace-notifications-for-a-reminder-service-with-node-c05047befec3上可以找到一个简单的示例。

文档:https://redis.io/topics/notifications(查找标志 xE)


-1
  static async setCount(ip: string, count: number) {
    const val = await redisClient.hSet(ip, 'ipHashField', count)
    await redisClient.expire(ip, this.expireTime)
  }

尝试使您的密钥过期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接