代码之家  ›  专栏  ›  技术社区  ›  Trace

redis:清理zset成员

  •  0
  • Trace  · 技术社区  · 6 年前

    我目前正在学习Redis,有以下情况:

    所以我有一个按google place id排序的集合,所有的帖子都是从最近到老排序的。 请求的第一页获取日志<当前时间戳。 当一个光标被发送到后端时,这个光标是一个简单的时间戳,它指示从何处从zset获取下一篇文章。
    按位置ID检索文章的查询将为:

    zRevRangeByScore<gplaceid><cur_timestamp>-inf Withscores limit<offset:timestamp as from where to fetch><count:number of posts>
    < /代码> 
    
    

    我的问题是,推荐什么方法来清理zset的成员。
    因为我想使用redis作为缓存,所以我希望将每个位置的文章数限制在50个以内。当地方得到新的帖子时,已经有50个帖子被添加到集合中,我想从集合中删除最后一个帖子。

    当然,我知道我可以手动检查每个插件并执行操作,但是我想知道Redis是否有执行这种清理的推荐方法。或者,我可以为此创建一个调度程序,但我不希望这样做。

    所以我有一个按google place id排序的集合,所有的帖子都是从最近到老排序的。 请求的第一页获取日志<当前时间戳。 当一个光标被发送到后端时,这个光标是一个简单的时间戳,它指示从何处从zset中获取下一篇文章。
    按位置ID检索文章的查询将是:

    ZREVRANGEBYSCORE <gplaceId> <cur_timestamp> -INF WITHSCORES LIMIT <offset:timestamp as from where to fetch> <count:number of posts>
    

    我的问题是,推荐什么方式来清理zset的成员。
    因为我想使用redis作为缓存,所以我希望将每个位置的文章数限制在50个以内。当地方得到新的帖子时,已经有50个帖子被添加到集合中,我想从集合中删除最后一个帖子。

    当然,我知道我可以手动检查每个插件并执行操作,但是我想知道Redis是否有执行这种清理的推荐方法。或者,我可以为此创建一个调度程序,但我不希望这样做。

    1 回复  |  直到 6 年前
        1
  •  0
  •   rainhacker    6 年前

    不幸的是,Redis排序集没有提供开箱即用的功能。如果排序集允许具有可配置收回策略的max-size属性,则可以避免一些额外的工作。

    请参阅此相关问题: How to specify Redis Sorted Set a fixed size?

    如果没有这样的特性,您提到的两种方法是正确的。

    1. 您可以用事务替换插入:插入、检查大小、删除if>50

    2. 检查装置尺寸并定期修整的螺纹。