Redis-获取与正则表达式匹配的键的值

use*_*775 6 regex key-value ttl redis webdis

我需要为每个键保存一些具有不同TTL的值。

例如-对于XXXX,值-val1(到期时间:10),val2(到期时间:20)

选项1: 我的最佳做法是:对每个成员的到期时间使用哈希/集。

不幸的是,containers尽管过去多次要求使用此功能,但Redis的(列表,哈希,集合和排序集合)不支持每个成员的有效期。

选项2: 所以我必须做这样的事情:

SETEX XXXX:0 10 val1

SETEX XXXX:1 20 Val2

现在,我想获取所有尚未过期的值,它们的键以XXXX开头。

所以我尝试了这个:

127.0.0.1:6379> keys XXXX:*
1) "XXXX:0"
2) "XXXX:1"
Run Code Online (Sandbox Code Playgroud)

但是我想获取,而不是

选项3:如何做到这一点,而不是将价值放到密钥中:

SETEX XXXX:val1 10 val1
SETEX XXXX:val2 20 val2

127.0.0.1:6379> keys XXXX:*
1) "XXXX:val1"
2) "XXXX:val2"
Run Code Online (Sandbox Code Playgroud)

这将是我最后的选择。我将不得不采取串后:...

任何想法如何使用更好的方法来实现选项1(替代)或至少选项2?

小智 1

要使用一个命令实现此目的,您可能需要自己处理密钥的过期问题。

假设 XXXX 是一个元素列表,例如将键保存在排序集中,并以过期时间戳作为成员的分数。

ZADD XXXX [current-timestamp + 10] val1
ZADD XXXX [current-timestamp + 20] val2
Run Code Online (Sandbox Code Playgroud)

并像这样获取它们:

ZREVRANGEBYSCORE XXXX +inf [current-timestamp]
Run Code Online (Sandbox Code Playgroud)

但是,您需要定期删除过期的元素:

ZREMRANGEBYSCORE XXXX -inf [current-timestamp]
Run Code Online (Sandbox Code Playgroud)