我们可以在 Redis 列表中添加值,并在 C# 中添加过期时间吗?



我正在使用Redis队列并使用ListLeftPush添加数据并使用ListRightPop读取数据。它工作正常,我能够获取数据。但是,如果数据没有弹出怎么办?我们可以删除旧数据吗?或者我们可以在具有到期时间的 Redis 列表中添加值吗? 如何在 C# 中使用 ListLeftPush 命令时为每个值添加时间限制?

为了保持 redis 的简单和快速,不可能为单个值添加过期时间。

您只能为单个密钥添加过期时间,即在您的情况下,它是针对整个列表的。

没有 Redis 不支持这一点。过期仅适用于顶级密钥。您的案例的关闭数据类型/解决方案将是sorted sets

  • 您将到期时间(时间戳(设置为score,同时添加到排序集(ZADD(
  • 而不是LPOP您可以使用ZPOPMAX来获取">上次过期"元素。
  • 您可以定期使用ZREMRANGEBYSCORE删除过期元素。

为了演示,我使用较小的数字作为到期日期。

127.0.0.1:6379> ZADD myset 15 "a"
(integer) 0
127.0.0.1:6379> ZADD myset 25 "b"
(integer) 0
127.0.0.1:6379> ZADD myset 35 "c" 45 "d" 55 "e"
(integer) 0
127.0.0.1:6379> ZRANGE myset 0 -1 WITHSCORES
1) "a"
2) "15"
3) "b"
4) "25"
5) "c"
6) "35"
7) "d"
8) "45"
9) "e"
10) "55"
127.0.0.1:6379> ZPOPMAX myset
1) "e"
2) "55"
127.0.0.1:6379> ZREMRANGEBYSCORE myset -1 15
(integer) 1
127.0.0.1:6379> ZRANGE myset 0 -1
1) "b"
2) "c"
3) "d"
127.0.0.1:6379>

相关内容

最新更新