【发布时间】:2018-06-11 04:48:05
【问题描述】:
我正在寻找一种为用户存储项目列表的方法,该列表将在 24 小时内过期。有没有办法使用 Redis 来实现这一点?我正在考虑只使用列表并为每个单独的项目设置过期时间,有没有更好的方法?
【问题讨论】:
-
这将是 Redis 中的一个很好的功能。
我正在寻找一种为用户存储项目列表的方法,该列表将在 24 小时内过期。有没有办法使用 Redis 来实现这一点?我正在考虑只使用列表并为每个单独的项目设置过期时间,有没有更好的方法?
【问题讨论】:
正如接受的答案中所述,Redis 中的过期仅在键级别执行 - 嵌套元素不能过期。
要实现具有过期元素的列表,您可以使用 Sorted Set 数据结构。每个成员的分数都应该是当前纪元,因此您将保留插入顺序。如果值(成员)不是唯一的,请通过连接 epoch 来使它们唯一,例如:
ZADD user1:items 1514822755 1514822755:value
ZADD user1:items 1514822758 1514822758:value
要“过期”项目,请从 -inf 和当前纪元减去 24 小时调用 ZREMRANGEBYSCORE。
【讨论】:
不,您不能为 LIST 中的每个项目设置过期时间。您只能为整个 LIST 设置过期时间。
为了实现你想要的,你需要为每一个item拥有一个key:
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:*
【讨论】: