前两天测试同学在群里反馈说测试环境经常会自动退出登录,需要手动重新登录,很麻烦。
本着不主动揽活的原则,我当时眼睛突然就瞎了。

好景说长也长说短也短,5个月之后,其他同事也陆续反馈,估计真受不了了。
老大特意@了我,我当时眼睛也正好瞎了,不过有一个前端同学眼睛贼好。老大顺带@了他,他说他要试试。

确实 token 有可能前端"无意间"调用了登出接口,导致的过期。这个想法非常合理。
我承认我应该向他学习的,但我手上的活实在是太多了。每次和 AI 神仙打架,AI 都表现得跟条死鱼一样,我不得不花时间和她多说几次:"给我可以运行的代码!!!"
后面前端哥们估计也是找不出原因来,这个事情就又搁置下来了,没人记得我,也没人在乎我。

痛吗?怎么可能痛?爽飞了。
但是,但是,但是。好景再一次不长。这次老大直接@我一个人了,要命的是老板还点了个+1。

为了避免年底喜提年终,我不得不先应下来,但也是能拖就拖。毕竟和 AI 神仙打架好玩点,看起来就是在使用前沿科技 vibe coding,实际上就是和 AI 对线扭打。
每天的类不再是身体的,而是骂不过 AI 的心累。哎,同时代码写的依托答辩,我还能喷赢他。如今连机器人写出依托答辩出来,我都骂不过,我真是个垃圾啊。
玩归玩闹归闹,找bug还得有人靠。于是我广发英雄帖,征求各大 AI 大佬的意见。他们从没如此一致过,说是我的用户登录态过期了,或者是误删了。
要不我学过点 Redis 皮毛还真被这些带佬蒙过去了。鄙人想偷懒才让你们分析,分析不对我自己也略懂一些拳脚。
再来回看 bug 的表现:
- 没有登出的时候token失效了
- 几个人集体发生
- 生产环境没有出现
- 生产环境和测试环境代码一样
- 近期没有改动账户服务
代码一样,那就找不一样的。那比较明显了,环境不一样,一个叫生产一个叫测试。嘿嘿

这就涉及到一个哲学问题:测试环境为什么叫测试环境?生产环境为什么叫生产环境?
一般来说就是测试环境是用来测试的,正式环境一般是给用户用来生产的。牛逼吧?
说人话就是测试环境是给内部人用的,正式环境是给义父们用的。
再说人话就是,内部人能有几个人,老板给个配置最差的 Redis,你都不能怨他。
所以我的猜想是什么呢?就是生产环境的 Redis 配置很高,测试环境的配置很低。
Redis 用的默认的内存策略 LRU,所以内存满了就会驱逐一部分 Key。
有了这个猜想,接下我们就要来验证一下猜想是否准确?
我看了一下生产环境和测试环境之间的差不别,你猜怎么着?
测试和生产之间的差别就是:生产的 Redis 内存 256G,测试的 Redis 内存 16M。
是的你妹看错,是16M。不是16G也不是256M,而是整整16M啊。

多磨勤俭持家的老板啊,为了省下点钱给我们发年终,涨工资。
他都不惜买最低配的服务器,给自己买最低配的跑车。一切都是为了员工的收入,也能理解。

这个配置文件显示测试环境运行的 Redis 就是16M的内存,还显示达到最大内存时的淘汰策略是 lru。
也就是内存满时,把最近最少使用的key给干掉,腾出存储空间来。
不信邪可以在 Redis-cli 执行命令看看实际上是不是这样
shell
> INFO MEMORY
# Memory
used_memory_human:8.47M
maxmemory_human:16.00M
maxmemory_policy:allkeys-lru
....
心死了,还真是,再查一下被驱逐的 key 有多少
shell
> INFO STATS
# Stats
evicted_keys:53725
...
这下心死透了,直接联系老板手下的运维大将,能不能将 16M 的 Redis 做个升级,升级到 32M?
没想到运维大将竟然直接答应了,还给升级到了 256M,我真是太感谢他了。还好有他,不然我元旦出门都要带电脑。

就酱。
