当前位置: 首页 > news >正文

火影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的几率贼低,所以我们删了缓存后,不管数据库是否能正常执行,我们继续查询神奇等级的时候,肯定会比上面那种情况会好,可以拿到新数据。

相关文章:

  • S19文件格式解析
  • 手撕基于AMQP协议的简易消息队列-6(服务端模块的编写)
  • 山东安全员A证的考试科目有哪些?
  • 【kubernetes】通过Sealos 命令行工具一键部署k8s集群
  • k8s术语之CronJob
  • C27-简单选择排序法
  • 路由交换实验
  • 应急响应靶机-Linux(2):知攻善防实验室
  • 组合优化中常用的数据结构
  • day23-集合(泛型Set数据结构)
  • SSH 服务部署指南
  • 66、微服务保姆教程(九)微服务的高可用性
  • Linux 网络管理 的实战代码示例
  • docker操作镜像-以mysql为例
  • 嵌入式学习--江协51单片机day3
  • 【Linux网络】Socket-UDP相关函数
  • 人工智能的自动驾驶新纪元:端到端智能系统挑战与前沿探索方案
  • 中国自动驾驶研发解决方案,第一!
  • 【算法学习】递归、搜索与回溯算法(二)
  • 性能远超SAM系模型,苏黎世大学等开发通用3D血管分割基础模型
  • 马上评|让“贾宝玉是长子长孙”争议回归理性讨论
  • 乡村快递取件“跑腿费”屡禁不止?云南元江县公布举报电话
  • 第1现场 | 印巴冲突:印50多年来首次举行大规模民防演习
  • 马新民卸任外交部条约法律司司长
  • 法治日报:商品明细是隐私,外卖员快递员不应知晓
  • 再有20余篇论文出现“妇科男患者”“前列腺女患者”,如何破除“水论文”灰产链?