这么过分一定要记下来 之 redis数据丢失变为空字符
我们服务端代码,除了各自单独建的其他分支外,主要有以下三个分支。
----------------------------------------------------------------------------------------------------------
1 首测线上版本master,玩家玩着的版本(是最稳定/bug最少(也不一定)的版本)
2 首测维护版本dev,会更新一些基于首测的小改动或bug修复,发布至测试服1,测试通过后合并master再发布游戏更新
3 二测开发中的版本sec,数值设计和接口改动比较多。目前只在测试服2发布更新内容
----------------------------------------------------------------------------------------------------------
神奇的是,今天有2个同事告诉我他们某次内部更新以后上不去游戏了
查log是玩家登录时获取关键数据报错,找了一下是SLG玩法整个redis的hash key变成了空字符
于是我看了看今天发布前的几个commit和merge,发现数值表是首测版本,代码被人误把我的二测计算内容给提前合进去了
但就算数值表不匹配,也不至于清空数据吧?顶多是表现不正常而已
进入复现调查环节:
我在虚拟机里模拟了他们发布的过程,旧数值,新代码,备分账号数据,然后登录游戏请求拉取数据
玩家数据正常
红点 活动 主线 等等都正常
SLG数据正……不对,产出值全都变成0了
打印了一下,发现一个公式计算除法的时候,分母数值为空,有数字除以0并被加到产出数值里了
这个数字的格式是float Inf,任何数除以0都会变成无穷大
而redis执行hmset的时候把这个不合格的字段也包含在整段数据中,因为种种原因,这个致命的错误保存让hash值被置为空字符
解决方案是:
让代码和数值表各回各家各找各妈退回到各自匹配的版本,然后把那个被除数做了校验,反正不能出现除以0的计算