首页 > 数据库 >redis应用场景--游戏排行榜

redis应用场景--游戏排行榜

时间:2023-06-08 14:45:55浏览次数:44  
标签:sort 分数 -- redis top list 玩家 排行榜 zadd

有序集合也是集合,不同之处在于,集合里的元素可以附带这个分数,元素不能重复,但是分数可以重复,不仅如此,还可以根据分数进行排序。

很多游戏都有玩家得分的排行榜,这个排行榜随时处于变动中。

游戏有很多玩家,可以设计一张表,记录每一个玩家的分数,并根据玩家新一局的分数来更新这张表,当需要获取排行榜前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

 

标签:sort,分数,--,redis,top,list,玩家,排行榜,zadd
From: https://www.cnblogs.com/99kol/p/17466405.html

相关文章

  • Kali安装JDK8以及JDK11、JDK17切换
    声明:本文分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。 瓜神学习网络安全公众号   背景 很久之前更新了一次kali,今天用的时候发现JDK变成17了 安装J......
  • 在前端生成H5二维码海报
    海报图片生成前后端都能实现,个人喜欢在前端生成,主要是前端可以用html+css去实现海报样式,便于调试,对于熟悉前端代码的小伙伴来说再好不过。以下是在vue项目中的实现,非vue前端同理。思路及步骤:1.用html实现海报效果制作海报模板图,用js二维码库生成二维码,用CSS的绝对定位实现二......
  • 实验7 面向对象编程与内置模块
    实验任务1task1.py实验源码:classAccount:'''一个模拟银行账户的简单类'''def__init__(self,name,account_number,initial_amount=10):'''构造新账户'''self._name=nameself._card_no......
  • 杭州阿里面试题___整理汇总
    杭州阿里面试题_=======================面试题:阿里一面 zxp  2023年6月8日1、自我介绍下2、你讲下你项目中做的自动化?3、你使用的什么自动化框架?4、具体讲解下框架使用到那些技术栈?5、自动中如何校验结果?6、自动化中的定位方法有那些?7、自动化如何让浏览器跑起来的原理?8、......
  • 杭州恒生面试题___整理汇总
     杭州恒生面试题==============================2023.6.8   -外派恒生电子第1面1.自我介绍2.功能和自动化性能的占比3.讲一下接口自动化测试框架4.一个输入框100-2000字符用等价类和边界值设计测试用例5.文件导入功能设计测试用例6.内链接和左连接的区别7.常用的Linux命令......
  • 【解决方案】DMS驾驶员监测系统自动化测试方案
    什么是DMS?DMS是英文DriverMonitorSystem的缩写,即驾驶员监控系统。主要是实现对驾驶员的身份识别、驾驶员疲劳驾驶以及危险行为的检测功能。目前主流监测方式以通过摄像头等图像传感器获取驾驶员面部图像为基础,运用机器视觉中人脸检测、面部特征点定位等算法技术,对......
  • python Tesseract 图片识别文字
    Python识别图片中的文字(zhihu.com)超详细解决pytesseract.pytesseract.TesseractNotFoundError:tesseractisnotinstalledorit'snotinyo...-简书(jianshu.com)......
  • Re: finding all cycles in a graph
    ref:https://cs.stackexchange.com/questions/7216/find-the-simple-cycles-in-a-directed-graphRe:findingallcyclesinagraphFrom: JuanPabloCarbajalSubject: Re:findingallcyclesinagraphDate: Wed,25Jan201219:43:48+0100OnWed,Jan25,2012a......
  • 汽车电子系统及其功能介绍
    汽车电子系统是指在现代汽车中应用的各种电子设备和系统,用于控制和监测车辆的各个方面。下面是一些常见的汽车电子系统及其功能的简要介绍:1、发动机管理系统(EngineManagementSystem):控制和监测发动机的运行,包括燃油供给、点火、气缸喷射、排放控制等。2、制动防抱死系统(Antilo......
  • 组件扫描配置
    有时候我们并不需要扫描包下所有的注解,即有时我们只需要扫描特定的注解时,我们可以自己组件扫描配置。首先关闭默认的过滤器。<context:component-scanbase-package="包路径"use-default-filters="false">然后指定要扫描的注解。<context:include-filter......