Redis: 如何为更新列表设置过期时间

5

我希望在Redis中存储一个长度不确定的集合,并且整个集合应该在几分钟后过期。

因此,我正在执行以下操作:

RPUSH 'a' 'b'  
EXPIRE 'a' 120  
RPUSH 'a' 'c'  
EXPIRE 'a' 120

但在这种情况下,我只有在'a'中有'c',因为EXPIRE之后的第一个RPUSH销毁了旧值。
先设置EXPIRE,我们在第一个RPUSH之后得到TTL->-1。

所以我的问题是,有没有我想要的方法?


1
无法复现。RPUSH 在我的机器上运行正确。 - Sergio Tulentsev
以上示例中,LRANGE 'a' 0 1 的结果是什么? - Stefan Weiss
1个回答

5

在 EXPIRE 后的第一个 RPUSH 将销毁旧值

这不是 Redis 的行为。你确定 LIST a 在添加c时没有已经过期了吗?我使用 redis-cli 进行了快速检查,并使用您的方法确认 Redis 正好符合您的预期行为:

RPUSH test foo
EXPIRE test 120
RPUSH test bar
EXPIRE test 120
LRANGE test 0 -1
# 1) "foo"
# 2) "bar"

调用 EXPIRE 命令可以正确地重置过期时间,使其延长 120 秒。对列表的任何更改都不会影响到过期时间或现有值。

我的“不太好”的主机商安装了古老的版本1.2。使用当前版本一切都很好。谢谢! - Stefan Weiss

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