在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能/ 如何防止Redis緩存失效時大量查詢穿透緩存

如何防止Redis緩存失效時大量查詢穿透緩存

假設(shè)我們有一個sql查詢將會耗時2秒。
我們給這個sql查詢結(jié)果緩存到redis并設(shè)置60秒超時時間。
那么在60秒到達(dá)的時候,也就是60到62秒的兩秒鐘,可能幾百個請求都沒有命中緩存而直接去查詢數(shù)據(jù)庫了。
請問如何防止這種情況發(fā)生呢?

回答
編輯回答
夢若殤

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

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

緩存雪崩解決方法:

  1. 在緩存失效后,通過加鎖或者隊列來控制讀數(shù)據(jù)庫寫緩存的線程數(shù)量。比如對某個key只允許一個線程查詢數(shù)據(jù)和寫緩存,其他線程等待。
  2. 可以通過緩存reload機制,預(yù)先去更新緩存,再即將發(fā)生大并發(fā)訪問前手動觸發(fā)加載緩存
  3. 不同的key,設(shè)置不同的過期時間,讓緩存失效的時間點盡量均勻
  4. 做二級緩存,或者雙緩存策略。A1為原始緩存,A2為拷貝緩存,A1失效時,可以訪問A2,A1緩存失效時間設(shè)置為短期,A2設(shè)置為長期。

來源: https://blog.csdn.net/m0_3811...

2018年8月27日 19:00
編輯回答
青裙

預(yù)估一下緩存數(shù)據(jù)的最大被使用的時長,60秒不是隨便設(shè)的,是根據(jù)場景需求來的,設(shè)個長一點的時間。別的辦法還真不知道,已關(guān)注,期待別的答案

2018年5月13日 15:57