那些让我印象深刻的bug--05

举报
小博测试成长之路 发表于 2022/06/16 00:37:32 2022/06/16
【摘要】 最近在测试过程中,遇到了一个线上的bug,也是跟缓存加载有关,下面简单地描述一下场景。 背景: 有一个缓存服务cache-services,里面提供了一个对外的接口,可以根据id进行查询,返回一系列的数据,其中有一个字段的返回值,在客户端会根据这个字段的值做一些校验处理,比如字段值为A的时候,就显示某个按钮。上线后过了几天,发...

最近在测试过程中,遇到了一个线上的bug,也是跟缓存加载有关,下面简单地描述一下场景。

背景:

有一个缓存服务cache-services,里面提供了一个对外的接口,可以根据id进行查询,返回一系列的数据,其中有一个字段的返回值,在客户端会根据这个字段的值做一些校验处理,比如字段值为A的时候,就显示某个按钮。上线后过了几天,发现app上某个按钮本应该显示的,突然之间不显示了,这个就是问题的现象。

问题原因:

出现问题的时候,首先是下游找过来我们排查问题,初步定位是因为某个接口没有返回一个字段的值,导致客户端没有展示这个按钮。

下面再来简单的讲一下缓存的加载设计:

假设现在有两张表,t1和t2,他们通过一个叫id的字段进行关联。由于表里面的数据量比较大,因此接口会从缓存中去查询数据,不会直接查库,然后数据库里面的数据有更新的时候,每1分钟会去刷新一次缓存中增量变化的数据。

假设数据库表设计如下:

t1

t2 

id

id

type

source

name

createTime

createTime

updateTime

updateTime


由于t1表是之前就已经存在的,已经会加载到缓存中去,并且之前的逻辑是每次t1的数据有更新时,会把对应id的数据覆盖掉。

最近,由于开发新的功能,加入了t2的表,换了一个人开发,在设计的时候,开发设计的是:在t2表里面有数据的时候,新增/更新数据时,把对应的字段source追加到之前对应id的数据的缓存中。由于我一开始测的时候,不清楚整个缓存加载的逻辑和设计,没有考虑到t1的数据有更新的时候,会覆盖之前的缓存,结果线上有一天t1的数据发生了变化,然后没有把source字段重新加到缓存中去。

问题解决的措施:

在加载主表缓存的时候,同时把其他附属表的相关字段也重新加载一遍。

如果看完后对您有帮助,可以点赞支持一下呦!

往期推荐

那些让我印象深刻的bug--01

那些让我印象深刻的bug--02

那些让我印象深刻的bug--03

那些让我印象深刻的bug--04

感谢您抽出 3f7ea608dcdb9265d9c70e6924a56e5c.gif 11e17f2eff8499358ddb4a13551b8be2.gif·1456281e8372d4013b668d1aa0a99283.gif f7110e169bacf77d8e72fff0329c7cf6.gif来阅读此文

更多精彩请点击【阅读原文】

↓↓↓

文章来源: xiaobotester.blog.csdn.net,作者:小博测试成长之路,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaobotester.blog.csdn.net/article/details/125289310

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。