这么过分一定要记下来 之 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的计算

 

posted @ 2021-07-27 15:00  南宫煎饼  阅读(490)  评论(0编辑  收藏  举报