缓存并发加载问题

生产上之前碰到过一个没加锁导致的经典并发的问题

1.问题现象

线上突然发生ERROR告警日志,xxx规则找不到,持续了2,3分钟

2.过程

1.当时看报错日志是规则A找不到,然后顺着日志发现这个活动下已经没有规则A了,规则A被修改了规则B。

2.但是代码里面还是用规则A的信息去查询的,导致出错。

3.原因

出现问题的原因:因为并发的去设置了本地规则缓存信息
自动加载的时候先取出A,这个时候运营刚刚好很巧的更新规则成B,然后设置本地缓存信息为B。完成这步以后规则自动缓存的就把之前取出来的A设置到本地缓存,覆盖了B。导致出问题。

image.png

4.影响时间

3min,因为本地缓存的过期时间是3min,过期了以后就会自动读取正确B

5.解决原因回溯

这个出现的原因主要有以下几点:
1.更新本地缓存未加锁。更新缓存信息的入口没控制好,导致管理端修改的情况下没用锁,直接修改缓存信息。这是根因
2.本地缓存时间还是太长了 线上是3min,把影响范围进一步的扩大了,实际这种本地缓存就应该设置短一点。例如3,4秒,每个给节点3、4秒查一次库对数据库并没有压力

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容