新聞中心
《緩存,究竟是淘汰,還是修改?》發(fā)出后,有朋友提到,高并發(fā)的情況下,緩存的更新可能存在問(wèn)題,今天簡(jiǎn)單聊聊這個(gè)話題。

成都創(chuàng)新互聯(lián)公司是專業(yè)的牟平網(wǎng)站建設(shè)公司,牟平接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行牟平網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
業(yè)務(wù)場(chǎng)景:
- 調(diào)用第三方服務(wù),例如微信,一般會(huì)分配一個(gè)token,每次訪問(wèn)接口需要帶上這個(gè)token;
- 這個(gè)token是有有效期的,當(dāng)token過(guò)期時(shí),需要去重新認(rèn)證申請(qǐng);
- 也可以在token過(guò)期前重新申請(qǐng),但此時(shí)舊token會(huì)失效。
常見(jiàn)實(shí)現(xiàn)方式,如圖:
- 把token放在緩存中,每次帶上token去調(diào)用接口;
- 如果token過(guò)期,需要去申請(qǐng)新token;
- 申請(qǐng)完新token,需要把新token更新到緩存里。
高并發(fā)下可能存在的問(wèn)題,如圖:
- 取舊token,訪問(wèn)接口,發(fā)現(xiàn)token過(guò)期;
- 并發(fā)請(qǐng)求,取舊token,訪問(wèn)接口,也發(fā)現(xiàn)token過(guò)期;
- 去申請(qǐng)新token1;
- 并發(fā)申請(qǐng)新token2(此時(shí)token1會(huì)過(guò)期);
- 把token1放入緩存,同時(shí)使用token1訪問(wèn)接口(此時(shí)token1已經(jīng)過(guò)期),發(fā)現(xiàn)token1過(guò)期,可能會(huì)遞歸申請(qǐng)新token3(此時(shí)token2過(guò)期);
- 把token2放入緩存,同時(shí)使用token2訪問(wèn)接口(此時(shí)token2已經(jīng)過(guò)期),發(fā)現(xiàn)token2過(guò)期,可能會(huì)遞歸申請(qǐng)新token4(此時(shí)token3過(guò)期);
- …
額,高并發(fā)請(qǐng)求導(dǎo)致相互失效。
常見(jiàn)解決方案,如圖:
- 線上s1和s2只從緩存讀取token
- 更新token異步,asy-Master定期更新token,避免并發(fā)更新
- 使用shadow-master保證token更新高可用,asy-Master掛了,asy-Backup頂上
潛在缺點(diǎn):
- s1/s2/asy-master直接調(diào)用同一個(gè)緩存實(shí)例,如果緩存實(shí)例變更,可能需要同步變更,導(dǎo)致耦合。
潛在優(yōu)化:
- asy-Master利用多線程,實(shí)現(xiàn)在s1/s2里,保證高可用;
- redis里用一個(gè)時(shí)間戳表示token的更新時(shí)間,更新token時(shí),查看token的時(shí)間戳,如果token剛更新過(guò),并發(fā)的請(qǐng)求便不再更新。
文字雖短,希望問(wèn)題描述清楚了,希望大家有收獲。
【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】
分享題目:緩存,并發(fā)更新的大坑?
分享鏈接:http://m.jiaoqi3.com/article/cdcohod.html


咨詢
建站咨詢
