Redis列表包含过期条目?

问题描述 投票:1回答:2

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

caching redis
2个回答
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:*

4
投票

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

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

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

要“过期”项目,请从ZREMRANGEBYSCORE调用-inf并减去当前时间减去24小时。

© www.soinside.com 2019 - 2024. All rights reserved.