国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

淺談redis的緩存穿透和緩存失效的預防和解決

2024-05-04 21:51:03
字體:
供稿:網(wǎng)友

本篇文章是關于redis的緩存穿透和緩存失效的預防和解決,具有一定的參考價值,感興趣的朋友可以了解一下,希望對你有所幫助。

緩存穿透:

認識

緩存穿透是指查詢一個一定不存在的數(shù)據(jù),由于緩存是不命中時需要從數(shù)據(jù)庫查詢,查不到數(shù)據(jù)則不寫入緩存,這將導致這個不存在的數(shù)據(jù)每次請求都要到數(shù)據(jù)庫去查詢,造成緩存穿透。

解決辦法:

對所有可能查詢的參數(shù)以hash形式存儲,在控制層先進行校驗,不符合則丟棄。還有最常見的則是采用布隆過濾器,將所有可能存在的數(shù)據(jù)哈希到一個足夠大的bitmap中,一個一定不存在的數(shù)據(jù)會被這個bitmap攔截掉,從而避免了對底層存儲系統(tǒng)的查詢壓力。

也可以采用一個更為簡單粗暴的方法,如果一個查詢返回的數(shù)據(jù)為空(不管是數(shù) 據(jù)不存在,還是系統(tǒng)故障),我們?nèi)匀话堰@個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。

緩存雪崩

認識

如果緩存集中在一段時間內(nèi)失效,發(fā)生大量的緩存穿透,所有的查詢都落在數(shù)據(jù)庫上,造成了緩存雪崩。

這個沒有完美解決辦法,但可以分析用戶行為,盡量讓失效時間點均勻分布。大多數(shù)系統(tǒng)設計者考慮用加鎖或者隊列的方式保證緩存的單線程(進程)寫,從而避免失效時大量的并發(fā)請求落到底層存儲系統(tǒng)上。

解決方法

在緩存失效后,通過加鎖或者隊列來控制讀數(shù)據(jù)庫寫緩存的線程數(shù)量。比如對某個key只允許一個線程查詢數(shù)據(jù)和寫緩存,其他線程等待。

可以通過緩存reload機制,預先去更新緩存,再即將發(fā)生大并發(fā)訪問前手動觸發(fā)加載緩存

不同的key,設置不同的過期時間,讓緩存失效的時間點盡量均勻

做二級緩存,或者雙緩存策略。A1為原始緩存,A2為拷貝緩存,A1失效時,可以訪問A2,A1緩存失效時間設置為短期,A2設置為長期。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 华蓥市| 临漳县| 公主岭市| 德庆县| 新邵县| 泾川县| 宁阳县| 南阳市| 繁昌县| 漳州市| 巴楚县| 馆陶县| 崇州市| 巩义市| 武清区| 娄底市| 会东县| 阳信县| 武威市| 定远县| 金堂县| 蒙阴县| 北碚区| 准格尔旗| 怀仁县| 汾阳市| 阿拉善右旗| 左贡县| 泗水县| 长武县| 罗江县| 衢州市| 元江| 昭觉县| 马山县| 平湖市| 商河县| 万宁市| 安岳县| 永年县| 积石山|