我一直在像这样存储和递增下载计数器:
INCRBY downloads:<filename> 1
但现在我想要下载:* 按值排序,以便显示热门下载列表。
我觉得我可以更好地存储它。我愚弄了:
ZINCRBY downloads 1 <filename>
ZREVRANGEBYSCORE downloads +inf -inf
这似乎确实为我提供了我想要的排序列表(最多下载到最少),但它只返回 <filename>
.看来我必须单独查询计数。
基本上,在 SQL 术语中,如果可以的话:
select filename, count(*) from downloads
我如何构造我的 Redis 数据以使该查询成为可能/容易?
最佳答案
您可以使用 ZREVRANGE z 0 -1 WITHSCORES
获取顶级电影,这也会返回分数。
此外,这还允许您在上述命令中使用“N-1”而不是“-1”轻松获得“TOP N”部电影。
关于按计数对字符串进行排序的 Redis 建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670845/