我正在设计一个系统,用户播放的每首歌都会登录到我的redis数据库中。然后我将在应用程序上创建一个顶级播放部分。该应用程序将索引我的数据库并收回播放次数最多的曲目(换句话说,重复次数最多的曲目!)如果蕾哈娜上场4次,泰勒·斯威夫特上场1次,U2上场2次。我希望蕾哈娜排在榜首,U2排在第二,泰勒·斯威夫特排在最后。
我的问题是:
如何按重复项与redis排序?或者我能做些什么来实现我的目标?
我试过的:
我试着做了redis-cli sort top_played alpha
但是当然,没有运气,因为那是通过字母表。
下面是我想要的订单的一个例子。
1. Rihanna
2. U2
3. Taylor Swift
下面是我的数据库输出:
redis-cli lrange top_played 0 7
1) "u2"
2) "u2"
3) "taylor swift"
4) "rihanna"
5) "rihanna"
6) "rihanna"
7) "rihanna"
最佳答案
您需要一个SORTED SET,而不是一个LIST
,来保存数据。
使用SORTED SET
,您可以计算一首曲目播放了多少次。每次播放曲目时,都可以调用ZINCRBY players 1 track-name
来增加指定曲目的计数器。这样,redis会根据播放的频率对所有曲目进行排序。当您想要获得topN
曲目时,只需发出以下命令:ZREVRANGE players 0 N-1
。