緩存場景問題處理

緩存雪崩
	概念:大量的key使用相同的過期時間,導致大量的緩存在某一時刻集體失效,從而造成大量請求同時打到DB,造成DB瞬時壓力太大導致雪崩。
	解決:將key的過期時間分散開來。在原來的過期時間上加上一個隨機值。

	
緩存擊穿
	概念:某個key在被高併發訪問的時候,若該key的過期時間到了,則大量訪問該key的請求就會直接打到DB上,造成DB的瞬時壓力太大導致掛掉。
	場景:某一個key存儲着熱點數據。
	解決:當發現緩存爲空時,不要直接去請求DB,而是在請求DB前先獲取互斥鎖,獲取到鎖線程來重建緩存。獲取失敗的線程自旋後重新獲取緩存即可。


緩存穿透
	概念:查詢一個不存在的數據(數據庫中沒有,緩存中當然也沒有)也會去請求一次DB,造成對DB無用的查詢。
	場景:被攻擊時可能會有大量無用的查詢。
	解決:
		方式一:將這個key緩存起來,value可設爲"key-null"。防止同樣的請求在短時間內對DB發起大量的請求。
				AutoLoadCache框架中對緩存穿透的解決:https://github.com/qiujiayu/AutoLoadCache/blob/master/doc/suggest.md
		方式二:採用布隆過濾器,將所有可能存在的數據哈希到一個足夠大的map中。不在map中的請求直接返回。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章