`
vanadiumlin
  • 浏览: 504653 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

edis在游戏服务器中的应用

 
阅读更多
edis在游戏服务器中的应用

Agent`K 最近在使用Redis,忽然发现以前很多费神的事情都迎刃而解了,又应了经典:我们要做的99%的事情,别人都早已做过了!


(扫盲:Redis是内存型、键值对型数据库,独立运行,不是第三方库)


排行榜
游戏服务器中涉及到很多排行信息,比如玩家等级排名、金钱排名、战斗力排名等。
一般情况下仅需要取排名的前N名就可以了,这时可以利用数据库的排序功能,或者自己维护一个元素数量有限的top集合。
但是有时候我们需要每一个玩家的排名,玩家的数量太多,不能利用数据库(全表排序压力太大),自己维护也会比较麻烦。
使用Redis可以很好的解决这个问题。它提供的有序Set,支持每个键值(比如玩家id)拥有一个分数(score),每次往这个set里添加元素,
Redis会对其进行排序,修改某一元素的score后,也会更新排序,在获取数据时,可以指定排序范围。
更重要的是,这个排序结果会被保存起来,不用在服务器启动时重新计算。
通过它,排行榜的实时刷新、全服排行都不再成为麻烦事。


消息队列(可跨服)
Redis提供的List数据类型,可以用来实现一个消息队列。
由于它是独立于游戏服务器的,所以多个游戏服务器可以通过它来交换数据、发送事件。
Redis还提供了发布、订阅的事件模型。
利用这些,我们就不必自己去实现一套服务器间的通信框架,方便地实现服务器组。


数据库缓存
Redis提供了较为丰富数据类型,使我们可以更为容易地将数据对象缓存起来(序列化、protobuffer)。
当需要请求某一数据时,先从Redis中查找,如果没有再查数据库,同时交给Redis缓存起来。
当对数据进行修改时,则先将修改后的数据保存到Redis,然后保存至数据库(2)。
第2步可以有另外的思路:
A不实时保存到数据库,而是交由另外的线程(甚至是专门的程序)去保存,以提高逻辑层的响应速度。
B部分数据交给Redis保存(Reids自身有持久化功能),像玩家已经完成过的任务ID集合,利用Redis的Set类型保存更为合适。
C玩家瞬时变化的数据不见得每次修改都需要保存(比如金钱、经验),但如果游戏服务器自己维护在内存中,出现宕机就会导致回档。
Redis是独立于游戏服务器的,交由它来保存,可以防止宕机回档的问题,也可以减少游戏服务器自己维护数据所占用的内存。
分享到:
评论

相关推荐

    [其他类别]安脉学生信息管理系统_edis_anmai.zip

    【标题】:“[其他类别]安脉学生信息管理系统_edis_anmai.zip”是一个包含源代码的压缩文件,可能是一个教育信息化领域的应用系统,用于管理学生的信息。从标题来看,我们可以推测这个系统叫做“安脉学生信息管理...

    [其他类别]安脉学生信息管理系统_edis_anmai(ASP.NET源码).rar

    【标题】:“安脉学生信息管理系统_edis_anmai”是一个基于ASP.NET技术开发的教育管理软件,主要用于管理和处理学生信息。这个系统可以帮助学校或教育机构有效地整理、存储和操作大量学生数据,提升教育管理效率。 ...

    .net抽象缓存工厂redis、httpruntime

    在.NET开发中,缓存是提高应用程序性能的关键技术之一,它可以减少对数据库的访问,从而降低服务器负载。本文将深入探讨.NET中抽象缓存工厂如何与Redis和HttpRuntime结合使用,以及如何在实际项目中应用这些概念。...

    edis:Redis的Erlang实现

    如果在使用此库时发现任何错误或有问题,请在此存储库中(或拉取请求:))。 您可以在检查我们所有的开源项目。 用法 只需运行$ make run并打开与您最喜欢的redis客户端的连接。 与Redis的差异 不同的行为 SAVE , ...

    edis:[不支持] 一个简单的 C 跨平台 IDE

    # Edis-IDE ...在代码中查找和替换单词 ... 和更多 平台 GNU/Linux 视窗 执行 ###预要求 Python 3.x PyQt4 QScintilla 标签 下载源代码或克隆存储库: git clone https://github.com/centaurialph

    windows 64 redis-2.8

    3. **启动Redis服务**:使用命令行界面(CMD)运行`redis-server.exe redis.windows.conf`来启动Redis服务器。如果一切正常,你应该能在控制台看到Redis服务已经启动并监听指定端口。 4. **客户端工具**:Redis提供...

    [其他类别]安脉学生信息管理系统_edis_anmai.zip源码ASP.NET网站源码打包下载

    [其他类别]安脉学生信息管理系统_edis_anmai.zip源码ASP.NET网站源码打包下载[其他类别]安脉学生信息管理系统_edis_anmai.zip源码ASP.NET网站源码打包下载[其他类别]安脉学生信息管理系统_edis_anmai.zip源码ASP.NET...

    redis-desktop-manager-2020.3.zip

    Redis桌面管理器(又名RDM) -是一个可以应用于Windows, Linux和MacOS操作系统的快速开源的Redis数据库管理应用程序。这个工具为你提供了一个易于使用的GUI来访问你的Redis数据库和执行一些基本的操作:以树的模式查看...

    程序源码 安脉学生信息管理系统_edis_anmai(ASP.NET源码).rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    DSP编程技巧之--从C/C++代码调用汇编代码中的函数与变量

    这在DSP编程中常见于`EALLOW`和`EDIS`这样的保护指令。但使用内联汇编时需注意: 1. 可能会影响代码优化。 2. 避免内嵌跳转或标记指令。 3. 不要在内联汇编中直接修改C/C++变量。 4. 不使用汇编指示性指令。 5. 避免...

    C语言设置TMS320系列DSP中断向量表是高级语言开发DSP的一个具体应用

    在嵌入式系统开发中,TMS320系列DSP(数字信号处理器)因其高性能和专为信号处理设计的特点而广泛应用于通信、音频处理、图像处理等领域。在使用C语言进行高级语言开发时,理解如何设置中断向量表是至关重要的,因为...

    epwm_deadband.zip_EPWM

    5. **调试与优化**:在实际应用中,死区时间的设定需要根据系统的具体需求进行调试和优化,例如调整死区时间长度以减小开关损耗,或者改善电机运行的平滑性。 文件"epwm_deadband"可能包含了实现上述功能的C代码...

    ANSYS中Ls_dyna应用指导

    ### ANSYS中Ls_dyna应用指导 #### 引言 **ANSYS/LS-DYNA** 是一种结合了显式有限元程序 **LS-DYNA** 和 **ANSYS** 强大前后处理功能的软件解决方案。它适用于解决瞬态大变形动力学问题、大变形和多重非线性准静态...

    redis入门指南

    edis入门指南

    TMS320F28335的PWM波形输出程序(内有丰富的中文注释)

    在电机控制、电源转换和照明驱动等应用中,PWM常用于调节功率和控制设备的工作状态。通过改变脉冲的宽度,可以在不改变频率的情况下改变平均功率输出。 TMS320F28335的PWM输出主要依赖于其内置的PWM模块,该模块...

    cadence器件资料

    在电子设计自动化(EDA)领域,Cadence是一个广泛使用的软件工具,主要用于集成电路设计、系统级设计、PCB设计...了解并掌握这些器件的特性、封装信息以及如何在Cadence环境中运用,是提升设计质量和效率的关键步骤。

    DSP 2812的看门狗总结

    ### DSP TMS320F2812的看门狗功能详解 #### 看门狗概述 在嵌入式系统中,看门狗(Watchdog Timer, WDT)是...开发者应该熟悉看门狗的工作原理及其在TMS320F2812中的具体实现方式,以便在实际项目中充分利用这一功能。

Global site tag (gtag.js) - Google Analytics