dbserver在最老的版本里只起到缓冲sql指令的作用,而不会对数据做缓存,后来有大佬想:对于玩家的数据,如果有这样两步操作:
1.更新A玩家数据
2.读取A玩家的数据
在做第二步的时候,如果我们事先在第一步时把A玩家的数据缓存在内存里,那么不需要执行select就可以返回给游戏服务器正确的数据了
于是加了一组新的接口XXXCache(),这组接口会把玩家数据缓存下来优化读取速率
但是老版本里有这样一段逻辑:
dbserver在处理sql请求时,如果发现与mysql服务器断开连接,需要等待重连,并且在重连成功后重新执行一次之前的请求
由于XXXCache()在执行完请求后会将暂存在内存中的请求对象销毁(暂存的原因是等到sql执行成功后才能将数据覆盖更新),于是如果断开连接时执行的是XXXCache()请求,
重连回来第二次执行时,请求对象已经被销毁了,会导致访问空指针对象宕机
网友评论