dbserver重连导致的宕机

dbserver在最老的版本里只起到缓冲sql指令的作用,而不会对数据做缓存,后来有大佬想:对于玩家的数据,如果有这样两步操作:

1.更新A玩家数据

2.读取A玩家的数据

在做第二步的时候,如果我们事先在第一步时把A玩家的数据缓存在内存里,那么不需要执行select就可以返回给游戏服务器正确的数据了

于是加了一组新的接口XXXCache(),这组接口会把玩家数据缓存下来优化读取速率

但是老版本里有这样一段逻辑:

dbserver在处理sql请求时,如果发现与mysql服务器断开连接,需要等待重连,并且在重连成功后重新执行一次之前的请求

由于XXXCache()在执行完请求后会将暂存在内存中的请求对象销毁(暂存的原因是等到sql执行成功后才能将数据覆盖更新),于是如果断开连接时执行的是XXXCache()请求,

重连回来第二次执行时,请求对象已经被销毁了,会导致访问空指针对象宕机

你可能感兴趣的:(dbserver重连导致的宕机)