記一次在線課程查看無(wú)響應(yīng)的處理過程

先說(shuō)下背景:用戶學(xué)習(xí)平臺(tái),單個(gè)課程有80課節(jié)左右,不同的用戶分配不同的營(yíng)期,不同的營(yíng)期有不同的課節(jié);為了提升用戶響應(yīng)速度對(duì)課節(jié)列表和單個(gè)課節(jié)的學(xué)習(xí)進(jìn)度數(shù)據(jù)進(jìn)行了緩存。當(dāng)課程進(jìn)行了更新時(shí),會(huì)同步把課程對(duì)應(yīng)用戶學(xué)習(xí)數(shù)據(jù)也更新。


上述方案一段時(shí)間運(yùn)行良好,相安無(wú)事。突然有一天運(yùn)營(yíng)小伙伴要調(diào)整課程相關(guān)信息,多人同時(shí)更新不同的課程信息,需要清除用戶學(xué)習(xí)緩存。

因?yàn)槭褂昧?b>Redis keys模糊查詢,導(dǎo)致阻塞I/O,導(dǎo)致無(wú)響應(yīng),對(duì)比三種方案如下:

方案1:Scan VS Keys:Scan相當(dāng)于分頁(yè)查詢,解決了長(zhǎng)時(shí)間阻塞IO,但是CPU一直高位運(yùn)作,系統(tǒng)響應(yīng)依舊很慢。

方案2:記錄所有Keys,指定刪除:可以解決長(zhǎng)時(shí)間阻塞IO和CPU高位運(yùn)作,但是侵入業(yè)務(wù)代碼,維護(hù)難度增加

方案3:通過課程版本號(hào)(時(shí)間戳等):引入版本號(hào)概念,隨機(jī)初始一個(gè)版本號(hào),每次更新增加1,作為Key的前綴,以空間換取時(shí)間。

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

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

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