通过以所需大小执行ltrim
,可以轻松地在具有固定大小的redis中执行列表。但是,如何维护包含时间限制而非大小限制的数据的列表。
E.g。我如何维护在过去10分钟内登录我网站的所有user_ids
的列表?请提供最有效的方法来说明这一点。也许我用错误的数据类型接近这个?
答案 0 :(得分:2)
只使用排序集而不是列表。使用unix时间戳作为项目的分数。
在Zset中添加项目:
ZADD myzet <current timestamp> item
要检索最近十分钟的项目,请按插入时间排序,先排除旧项目:
ZRANGEBYSCORE myzset (<current timestamp - 600 seconds> (+inf
使用ZRANGEBYSCORE获取最新的第一个替换ZREVRANGEBYSCORE
。
删除过期的项目:
ZREMRANGEBYSCORE -inf (<current timestamp - 600 seconds>