我想在 Redis 中存储一组长度不确定的数据,整个数据集应该在几分钟后过期。
所以,我正在做:
RPUSH 'a' 'b'  
EXPIRE 'a' 120  
RPUSH 'a' 'c'  
EXPIRE 'a' 120
但在这种情况下,我在“a”中只有“c”,因为 EXPIRE 后的第一个 RPUSH 会破坏旧值。
首先设置 EXPIRE,在第一次 RPUSH 后我们有 TTL->-1。
所以我的问题是,有办法做到我想要的吗?
EXPIRE 后的第一个 RPUSH 会破坏旧值
这不是 Redis 的行为。您确定a添加到 LIST 时它还没有过期吗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 秒。对列表的任何更改都不会影响过期值或现有值。
| 归档时间: | 
 | 
| 查看次数: | 15023 次 | 
| 最近记录: |