• 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是独立于游戏服务器的,交由它来保存,可以防止宕机回档的问题,也可以减少游戏服务器自己维护数据所占用的内存。

    此文来自:http://www.cnblogs.com/agent-k/p/Redis.html

  • 相关阅读:
    网络流24题-[CTSC1999]家园
    网络流24题-孤岛营救问题
    汽车加油行驶问题(分层图最短路)
    送外卖(可重复点的哈密顿路径)
    信与信封问题
    最小完全图(最小生成树加边成完全图)
    校园网(有向图加边变成强连通图)
    玩具装箱
    MSTest、NUnit、xUnit对照表
    .NET Core学习 笔记索引
  • 原文地址:https://www.cnblogs.com/cqmy/p/6201545.html
Copyright © 2020-2023  润新知