Redis列表包含过期条目?

时间:2017-12-31 18:03:46

标签: caching redis

我正在寻找一种方法来存储用户的项目列表,该列表将在24小时内过期。有没有办法使用Redis实现这一目标?我只想使用列表并为每个项目设置过期,有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

不,您无法为LIST中的每个项目设置到期日期。您只能为整个LIST设置到期日期。

为了达到您想要的效果,您需要为每个项目设置一个键:

SET user1:item1 value EX 86400
SET uesr1:iter2 value EX 86400
SET user2:item1 value EX 86400

要获取指定用户的所有项目,您可以将SCAN命令与模式一起使用(或使用Keyspace Notification来获得更好的性能,但工作更复杂):

SCAN 0 MATCH user1:*

答案 1 :(得分:4)

如接受的答案中所述,Redis中的到期仅在关键级别执行 - 嵌套元素不能过期。

要实现包含过期元素的列表,可以使用排序集数据结构。每个成员的得分应该是当前的纪元,因此您将保留插入顺序。如果值(成员)不是唯一的,那么通过连接时期来实现它们,例如:

ZADD user1:items 1514822755 1514822755:value
ZADD user1:items 1514822758 1514822758:value

To" expire"项目,从-inf拨打ZREMRANGEBYSCORE,在当前时间减去24小时。