Redis列表中有过期条目?

Mat*_*nny 2 caching redis

我正在寻找一种为用户存储项目列表的方法,该方法将在24小时内过期。有没有办法使用Redis做到这一点?我当时想只使用列表并为每个单独的商品设置有效期,是否有更好的方法?

for*_*ack 9

不,您不能为LIST. 您只能为整个LIST.

为了实现您想要的,您需要为每个项目设置一个键:

SET user1:item1 value EX 86400
SET uesr1:iter2 value EX 86400
SET user2:item1 value EX 86400
Run Code Online (Sandbox Code Playgroud)

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

SCAN 0 MATCH user1:*
Run Code Online (Sandbox Code Playgroud)


Ita*_*ber 5

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

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

ZADD user1:items 1514822755 1514822755:value
ZADD user1:items 1514822758 1514822758:value
Run Code Online (Sandbox Code Playgroud)

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

  • 如果元素不应在 24 小时后全部过期,而是以不同的时间间隔过期,则可以将分数定义为过期时间戳,从而从 -inf 和现在调用 ZREMRANGEBYSCORE。将不再遵守插入顺序 (2认同)