前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis在游戏服务器中的应用

Redis在游戏服务器中的应用

作者头像
李海彬
发布2018-03-21 11:19:12
2.2K0
发布2018-03-21 11:19:12
举报
文章被收录于专栏:Golang语言社区Golang语言社区

排行榜 游戏服务器中涉及到很多排行信息,比如玩家等级排名、金钱排名、战斗力排名等。 一般情况下仅需要取排名的前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是独立于游戏服务器的,交由它来保存,可以防止宕机回档的问题,也可以减少游戏服务器自己维护数据所占用的内存。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档