Redis列表中有过期条目?

k97glaaz  于 2022-11-21  发布在  Redis
关注(0)|答案(3)|浏览(146)

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

6yjfywim

6yjfywim1#

我 使用 :
ZADD - 将 新 的 唯一 值 添加 到 排序 集 。
ZRANGE - 从 集合 中 获取 按 得分 排序 的 所有 当前 值 。 ( ZREMRANGEBYSCORE 已 弃 用 )
ZREMRANGEBYSCORE - 从 集合 中 移除 分数 之间 的 所有 关键 点 。

    • 在 此 解决 方案 中 得分 = 时间 戳 * *
    • 例如 : * *

3 值 插入 :

ZADD mykey 160 val1        // 1
ZADD mykey 161 val2        // 1
ZADD mykey 120 val3        // 1

中 的 每 一 个
获取 得分 之间 排序 值 ( 在 - 无穷 大 到 400 之间 ) :

ZRANGE mykey -inf 400 BYSCORE      // ['val3', 'val1', 'val2']

格式
删除 值 ( 在 - 无穷 大 到 121 之间 ) - val3 将 被 删除 :

ZREMRANGEBYSCORE mykey -inf 121      // 1

格式
( 再次 ) - 得到 得分 之间 的 排序 值 ( - 无穷 大 到 400 之间 ) :

ZRANGE mykey -inf 400 BYSCORE       // ['val1', 'val2']

格式

p4rjhz4m

p4rjhz4m2#

不,您不能为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:*
sqserrrh

sqserrrh3#

我 实现 了@Itamar Haber 写 的 东西 , 它 起 作用 了 !
我 使用 :
ZADD - 将 新 的 唯一 值 添加 到 排序 集 。
ZRANGE - 从 集合 中 获取 按 得分 排序 的 所有 当前 值 。 ( ZREMRANGEBYSCORE 已 弃 用 )
ZREMRANGEBYSCORE - 从 集合 中 移除 分数 之间 的 所有 关键 点 。

    • 在 此 解决 方案 中 得分 = 时间 戳 * *
    • 例如 : * *

3 值 插入 :

ZADD mykey 160 val1        // 1
ZADD mykey 161 val2        // 1
ZADD mykey 120 val3        // 1

中 的 每 一 个
获取 得分 之间 排序 值 ( 在 - 无穷 大 到 400 之间 ) :

ZRANGE mykey -inf 400 BYSCORE      // ['val3', 'val1', 'val2']

格式
删除 值 ( 在 - 无穷 大 到 121 之间 ) - val3 将 被 删除 :

ZREMRANGEBYSCORE mykey -inf 121      // 1

格式
( 再次 ) - 得到 得分 之间 的 排序 值 ( - 无穷 大 到 400 之间 ) :

ZRANGE mykey -inf 400 BYSCORE       // ['val1', 'val2']

格式

相关问题