您好,登錄后才能下訂單哦!
這篇文章主要介紹“Redis中的緩存穿透、緩存雪崩、緩存擊穿和緩存一致性怎么理解”,在日常操作中,相信很多人在Redis中的緩存穿透、緩存雪崩、緩存擊穿和緩存一致性怎么理解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Redis中的緩存穿透、緩存雪崩、緩存擊穿和緩存一致性怎么理解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
緩存同一時間大面積失效,后面的請求都會落到數據庫上,造成數據庫短時間內無法承受大量請求而崩潰
例如在電商首頁,所有首頁的key失效時間都是12小時,中午12點刷新,如果零點有個秒殺活動大量用戶涌入,但是緩存當時所有key都失效,此時所有的請求會落到數據庫,數據庫扛不住,就直接就gg了,又或者redis宕機,也會讓大量請求落到mysql,造成掛機。【相關推薦:Redis視頻教程】
所以像這種情況就應該把每個key的失效時間加個隨機值,避免同一時間大量的key失效,如果是redis集群部署,可以將熱點數據分布到各個不同的庫。
事前:盡量保證redis集群的高可用性,發現機器宕機盡快補上,選擇合適的內存淘汰策略
事中:本地ehcache緩存+hystrix限流加降級,避免mysql崩掉
事后:里有redis持久化機制保存的數據盡快恢復緩存。
大量請求的key不存在于緩存中,例如某個黑客制造緩存中不存在的key發起大量請求,導致大量請求落到數據庫。
首先應該要做基本的入參校驗,將不合法的參數直接攔截,例如查詢數據庫id不能小于0,校驗郵箱格式等等
如果緩存和數據庫都查不到某個key的數據,就將key寫入到redis,value為null,并設置過期時間,避免下次請求落到數據庫上。
通過布隆過濾器,布隆過濾器可以非常方便的判定一個給定的數據是否存在與海量數據中.可以將所有可能存在的請求的值存到布隆過濾器,當請求過來先判斷用戶發來的請求是否存在于布隆過濾器,不存在就直接攔截。
緩存擊穿指的是一個Key非常熱點,在不停的扛著大并發,大并發集中對這一個點進行訪問,當這個key失效瞬間,持續的大并發就穿破緩存,直接請求到數據庫
如果是要求強一致性,那就不能使用緩存,因為保證不了強一致性,只能保證最終一致性。
先刪除緩存,再更新數據庫
如果數據庫更新失敗,那么數據庫的還是舊數據,redis是空,數據不會不一致,讀到空會去數據庫進行查詢,然后更新到緩存。
加入隊列,進行串行化操作
先刪除緩存,再更新數據庫,在高并發場景下也會出現問題,例如刪除了緩存,這時還沒更新數據庫,另一個線程進來,發現redis是空,會去讀數據庫,然后更新到redis,而此時刪除了緩存的線程接著更新數據庫,就會造成數據庫和redis數據不一致,這時候可以將更新數據的操作放到隊列當中,串行化操作,不會出現,但一般不建議這樣做,因為會降低效率。
到此,關于“Redis中的緩存穿透、緩存雪崩、緩存擊穿和緩存一致性怎么理解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。