redis应用场景--游戏排行榜
有序集合也是集合,不同之处在于,集合里的元素可以附带这个分数,元素不能重复,但是分数可以重复,不仅如此,还可以根据分数进行排序。
很多游戏都有玩家得分的排行榜,这个排行榜随时处于变动中。
游戏有很多玩家,可以设计一张表,记录每一个玩家的分数,并根据玩家新一局的分数来更新这张表,当需要获取排行榜前10的玩家,只需要查询这张表,根据分数排序并使用limit获取前10位。
但当玩家数量非常多时,整张表会非常大,而且排行榜是可以使用频率非常高的功能,那么对数据库的查询会非常频繁。为此,可以使用redis的有序集合,来实现这个需求。
例子:现在有一些玩家,并且包含了玩家的得分,如下图,现在通过zset来实现对这些玩家的得分进行排序
from redis.client import Redis r = Redis(host='0.0.0.0', port=6379, db=0, password='') # r.zadd('sort_list', {'小明': 8733}) # r.zadd('sort_list', {'小刚': 4355}) # r.zadd('sort_list', {'小红': 5635}) # r.zadd('sort_list', {'小丽': 7653}) # r.zadd('sort_list', {'小王': 8765}) # r.zadd('sort_list', {'小刘': 9876}) def get_top(count): top_three = r.zrevrange('sort_list', 0, count-1, withscores=True) for name, score in top_three: print(name.decode(), score) get_top(2) #r.zadd('sort_list', {'小红': 11093}) print("*"*20) get_top(4)
输出结果:
小红 11093.0
小刘 9876.0
********************
小红 11093.0
小刘 9876.0
小王 8765.0
小明 8733.0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?