阿里巴巴b2bseo技術培訓課程
緩存擊穿的意思是對于設置了過期時間的key,緩存在某個時間點過期的時候,恰好這時間點對這個
Key有大量的并發(fā)請求過來,這些請求發(fā)現緩存過期- -般都會從后端DB加載數據并回設到緩存,這個時候大并發(fā)的請求可能會瞬間把DB壓垮。
解決方案有兩種方式:
第一可以使用互斥鎖:當緩存失效時,不立即去load db,先使用如Redis的setnx去設置一個互斥鎖,?當操作成功返回時再進行l(wèi)oad db的操作并回設緩存,否則重試get緩存的方法
第二種方案可以設置當前key邏輯過期,大概是思路如下:
①:在設置key的時候,設置一個過期時間字段一 塊存 入緩存中,不給當前key設置過期時間
②:當查詢的時候,從redis取出數據后判斷時間是否過期
③:如果過期則開通另外一個線程進行數據同步,當前線程正常返回數據,這個數據不是最新
當然兩種方案各有利弊:
如果選擇數據的強一致性,建議使用分布式鎖的方案,性能上可能沒那么高,鎖需要等,也有可能
生死鎖的問題
如果選擇key的邏輯刪除,則優(yōu)先考慮的高可用性,性能比較高,但是數據同步這塊做不到強一致。