我正在寻找一种方法来存储用户的项目列表,该列表将在24小时内到期。有没有办法使用Redis实现这一目标?我只想使用列表并为每个项目设置过期,有更好的方法吗?
不,你不能为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:*
如接受的答案中所述,Redis中的到期仅在关键级别执行 - 嵌套元素不能过期。
要实现具有过期元素的列表,可以使用排序集数据结构。每个成员的分数应该是当前的纪元,因此您将保留插入顺序。如果值(成员)不是唯一的,那么通过连接纪元来制作它们,例如:
ZADD user1:items 1514822755 1514822755:value
ZADD user1:items 1514822758 1514822758:value
要“过期”项目,请从ZREMRANGEBYSCORE
调用-inf
并减去当前时间减去24小时。