站务联系

游戏服务器之数据缓存

发布时间:2021-03-11   来源:网络整理    
字号:

游戏服务器中,一般相似用户的操作还会在一个指定的句柄中操作,而一个句柄中又会有多个用户的使用。如果对用户数据的操作踏入直接出库操作,那么都会形成io操作,主要有网路io跟硬盘io。所以通常我们都是选用显存缓存的形式。内存缓存数据库的形式有很多种,网上还有好多,这里也是介绍一下我的思路跟实现。

首先确定一下服务的定位,一,业务服务,负责处理业务逻辑的服务,叫logicServer吧,这个服务会对数据进行经常的更改,所以为了减少效率,这个服务会缓存角色的所有数据。二,是数据缓存更新服务,暂且叫dao层服务吧,它负责对角色数据的常年缓存,和更新数据至数据库中。logicServer对数据的更改经常,如果每天更改都恳求数据库的话,就有点很经常了,有些数据被多次更改,只须要更新一次就可以了。所以这儿缓存的数据选用定时更新至dao层的形式。比如60s更新一次。用户下线以后,如果五分钟还没有重新上线,就断定用户不玩了,就把这个用户的显存数据清除掉。但是dao层对数据的缓存时间要长一些,比如每天或一周假如没有更新数据就清除掉。相当于redis做一下长时间的缓存,这样用户一天内或一周内登录多次都会直接从缓存中获取数据,而不用查数据库了。dao层的数据只是定律更新至数据库,比如每五分钟更新一次。不过只更新形成变化的数据。

游戏服务器之数据缓存

它是一个文档类别的数据库,在游戏中,一个角色的数据由多个对象组成,比如角色信息对象,背包对象,技能对象,关卡对象等等。我们把一个用户的所有信息都放在一个大对象中,比如UserData中,UserData中包括了所有的数据对象。把它一次性储存至mongodb中,用户踏入logicServer的时侯,也一次性全部取下来了,可以降低查询的次数。而且在保存数据至数据库的时侯游戏服务器,只须要读取mongo的save方式,如果更新的对象存在_id,就直接覆盖掉老 数据,如果不存在_id,就插入一条新数据。很方便。如果角色的数据很多,可以把大表的数据单独再存至一个collection中。

游戏服务器之数据缓存

logicServer缓存的是数据对象,而dao中缓存的是对象的json数据。因为dao层的数据不做可视化读取,只是跟业务服务之间传输,而且这样做,在业务中提高数据时,不需要更改dao层的结构。业务服更新数据至dao选用消息队列的方法游戏服务器,异步更新。

游戏服务器之数据缓存

图说天下

×
二维码生成