緩存并發(fā)加載問題

生產(chǎn)上之前碰到過一個(gè)沒加鎖導(dǎo)致的經(jīng)典并發(fā)的問題

1.問題現(xiàn)象

線上突然發(fā)生ERROR告警日志,xxx規(guī)則找不到,持續(xù)了2,3分鐘

2.過程

1.當(dāng)時(shí)看報(bào)錯(cuò)日志是規(guī)則A找不到,然后順著日志發(fā)現(xiàn)這個(gè)活動下已經(jīng)沒有規(guī)則A了,規(guī)則A被修改了規(guī)則B。

2.但是代碼里面還是用規(guī)則A的信息去查詢的,導(dǎo)致出錯(cuò)。

3.原因

出現(xiàn)問題的原因:因?yàn)椴l(fā)的去設(shè)置了本地規(guī)則緩存信息。
自動加載的時(shí)候先取出A,這個(gè)時(shí)候運(yùn)營剛剛好很巧的更新規(guī)則成B,然后設(shè)置本地緩存信息為B。完成這步以后規(guī)則自動緩存的就把之前取出來的A設(shè)置到本地緩存,覆蓋了B。導(dǎo)致出問題。

image.png

4.影響時(shí)間

3min,因?yàn)楸镜鼐彺娴倪^期時(shí)間是3min,過期了以后就會自動讀取正確B

5.解決原因回溯

這個(gè)出現(xiàn)的原因主要有以下幾點(diǎn):
1.更新本地緩存未加鎖。更新緩存信息的入口沒控制好,導(dǎo)致管理端修改的情況下沒用鎖,直接修改緩存信息。這是根因
2.本地緩存時(shí)間還是太長了 線上是3min,把影響范圍進(jìn)一步的擴(kuò)大了,實(shí)際這種本地緩存就應(yīng)該設(shè)置短一點(diǎn)。例如3,4秒,每個(gè)給節(jié)點(diǎn)3、4秒查一次庫對數(shù)據(jù)庫并沒有壓力

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容