那些让我印象深刻的bug--05
最近在测试过程中,遇到了一个线上的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字段重新加到缓存中去。
问题解决的措施:
在加载主表缓存的时候,同时把其他附属表的相关字段也重新加载一遍。
如果看完后对您有帮助,可以点赞支持一下呦!
往期推荐
感谢您抽出 · 来阅读此文
更多精彩请点击【阅读原文】
↓↓↓
文章来源: xiaobotester.blog.csdn.net,作者:小博测试成长之路,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaobotester.blog.csdn.net/article/details/125289310
- 点赞
- 收藏
- 关注作者
评论(0)