4

我想在redis中存储一组不确定的长度,整个集合应该在几分钟后过期。
所以,我在做:
RPUSH 'a' 'b'
EXPIRE 'a' 120
RPUSH 'a' 'c'
EXPIRE 'a' 120

但在这种情况下,我在“a”中只有“c”,因为 EXPIRE 后的第一个 RPUSH 会破坏旧值。
首先设置 EXPIRE,在第一次 RPUSH 之后我们有 TTL->-1。

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

4

1 回答 1

4

EXPIRE 后的第一个 RPUSH 销毁旧值

这不是 Redis 的行为。您确定 LISTa在添加时还没有过期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 秒。对列表的任何更改都不会影响到期或现有值。

于 2013-09-26T15:47:20.547 回答