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