我正在寻找一种方法来为用户存储一个将在24小时内过期的项目列表。有没有办法用Redis来实现这一点呢?我想只是使用列表并为每个项目设置一个过期时间,有没有更好的方法?
6yjfywim1#
我 使用 :ZADD - 将 新 的 唯一 值 添加 到 排序 集 。ZRANGE - 从 集合 中 获取 按 得分 排序 的 所有 当前 值 。 ( ZREMRANGEBYSCORE 已 弃 用 )ZREMRANGEBYSCORE - 从 集合 中 移除 分数 之间 的 所有 关键 点 。
ZADD
ZRANGE
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']
格式
p4rjhz4m2#
不,您不能为LIST中的每个项目设置过期时间。您只能为整个LIST设置过期时间。为了达到您的目的,您需要为每一项设置一个键:
LIST
SET user1:item1 value EX 86400 SET uesr1:iter2 value EX 86400 SET user2:item1 value EX 86400
要获取指定用户的所有项,可以使用带有模式的SCAN命令(或者使用Keyspace Notification以获得更好的性能,但需要更复杂的工作):
SCAN
Keyspace Notification
SCAN 0 MATCH user1:*
sqserrrh3#
我 实现 了@Itamar Haber 写 的 东西 , 它 起 作用 了 !我 使用 :ZADD - 将 新 的 唯一 值 添加 到 排序 集 。ZRANGE - 从 集合 中 获取 按 得分 排序 的 所有 当前 值 。 ( ZREMRANGEBYSCORE 已 弃 用 )ZREMRANGEBYSCORE - 从 集合 中 移除 分数 之间 的 所有 关键 点 。
3条答案
按热度按时间6yjfywim1#
我 使用 :
ZADD
- 将 新 的 唯一 值 添加 到 排序 集 。ZRANGE
- 从 集合 中 获取 按 得分 排序 的 所有 当前 值 。 (ZREMRANGEBYSCORE
已 弃 用 )ZREMRANGEBYSCORE
- 从 集合 中 移除 分数 之间 的 所有 关键 点 。3 值 插入 :
中 的 每 一 个
获取 得分 之间 排序 值 ( 在 - 无穷 大 到 400 之间 ) :
格式
删除 值 ( 在 - 无穷 大 到 121 之间 ) - val3 将 被 删除 :
格式
( 再次 ) - 得到 得分 之间 的 排序 值 ( - 无穷 大 到 400 之间 ) :
格式
p4rjhz4m2#
不,您不能为
LIST
中的每个项目设置过期时间。您只能为整个LIST
设置过期时间。为了达到您的目的,您需要为每一项设置一个键:
要获取指定用户的所有项,可以使用带有模式的
SCAN
命令(或者使用Keyspace Notification
以获得更好的性能,但需要更复杂的工作):sqserrrh3#
我 实现 了@Itamar Haber 写 的 东西 , 它 起 作用 了 !
我 使用 :
ZADD
- 将 新 的 唯一 值 添加 到 排序 集 。ZRANGE
- 从 集合 中 获取 按 得分 排序 的 所有 当前 值 。 (ZREMRANGEBYSCORE
已 弃 用 )ZREMRANGEBYSCORE
- 从 集合 中 移除 分数 之间 的 所有 关键 点 。3 值 插入 :
中 的 每 一 个
获取 得分 之间 排序 值 ( 在 - 无穷 大 到 400 之间 ) :
格式
删除 值 ( 在 - 无穷 大 到 121 之间 ) - val3 将 被 删除 :
格式
( 再次 ) - 得到 得分 之间 的 排序 值 ( - 无穷 大 到 400 之间 ) :
格式