火影bug,未保证短时间数据一致性,拿这个例子讲一下Redis

本文只拿这个游戏的bug来举例Redis,如果有不妥的地方,联系我进行删除
描述:
今天在高速上打火影(有隧道,有时候会卡),发现了个bug,我点了两次 -1000的忍玉(大概用了1千七百多忍玉),但是 神器等级没有增加 ,可是忍玉数量减少了,过了几小时后,我再登录,神器等级才看到增加。

原来神器等级58,123(没截图)

后面神器等级59,450

1.问题(查询到假数据)

这里假设用的是MySQL和Redis

1.1 业务流程(将信息放入MQ,先操作数据库,再操作Redis)

假设先对忍玉和神器等级的数据库 进行update操作 ,然后进行 忍玉和神器等级缓存(为什么不是更新缓存呢,因为如果我们一直操作数据库,就要一直更新缓存,如果用户不进行查询,那么这些更新缓存的操作就是多余的浪费资源,我们直接删缓存,等用户来查的时候我们再去查一次数据库就好了)

如果一切正常的话,数据库得到更新,缓存得到删除,当用户来查的时候,就拿到了新数据

但是由于我们卡(或其他问题),导致部分进程异常终止,导致没有删缓存的操作,这就导致了我们继续查神器等级的时候,还是拿到了旧数据(Redis存有,直接返回)

2.解决方案

上面是先操作数据库,再操作Redis

由于操作数据库的时间远远大于操作Redis的时间,这就导致在操作数据库的时候出现bug的几率就会增大,所以,我们可以换一下顺序,即 我们先操作Redis,再操作数据库,因为操作Redis的时间很短,这个时间段内出现bug的几率贼低,所以我们删了缓存后,不管数据库是否能正常执行,我们继续查询神奇等级的时候,肯定会比上面那种情况会好,可以拿到新数据。

相关推荐
小林ixn7 分钟前
用 Next.js 和 Redis 撸一个 Markdown 笔记系统:RSC 实战与组件化拆解
前端·redis·next.js
北漂燕郊杨哥2 小时前
Win11 环境下 phpStudy 安装 Redis 最新版,并为 PHP 8.5.9(NTS)配置 redis 扩展
数据库·redis·php
天疆说17 小时前
01 硬件选型与 llama.cpp 部署:4× RTX 5880 Ada 跑 DeepSeek-V4-Flash
java·redis·llama
嘟嘟071718 小时前
Next.js 博客左侧笔记列表是怎么从 Redis 渲染出来的?从组件、children 到动态路由一次讲清
redis·react.js·前端工程化
Rain的Java大神之路20 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
姚青&21 小时前
Bug基本概念
bug
Amir_zy1 天前
Redis测试方法全攻略:冒烟、压测与稳定性验证
redis·压力测试
AI多Agent协作实战派1 天前
AI多Agent协作系统实战(三十九):AI修对了Bug,却越了权——自动化团队的第一条铁律
人工智能·自动化·bug
霸道流氓气质1 天前
RedLock:Redis 分布式锁的高可用方案
数据库·redis·分布式
breeze jiang1 天前
Next.js App Router 父子组件 RSC 拆分实战:从 Redis Hash 到客户端交互的最小化边界
javascript·redis·哈希算法