我正在研究Redis,并遇到以下情况:
所以我所拥有的是按Google地点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是否具有推荐的执行此清理的方法。另外,我可以为此创建一个调度程序,但是我宁愿不必这样做。
答案 0 :(得分:0)
不幸的是,Redis排序集不具有开箱即用的功能。如果排序后的集允许最大大小属性和可配置的逐出策略-您可以避免一些额外的工作。
请参阅以下相关问题: How to specify Redis Sorted Set a fixed size?
在没有这种功能的情况下,您提到的两种方法是正确的。
您可以用事务替换插入:插入,检查大小,如果大于50则删除
检查集合大小并定期修剪的线程