日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis 缓存常见问题 :缓存雪崩,缓存击穿,缓存穿透,缓存预热

發(fā)布時(shí)間:2024/4/11 数据库 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis 缓存常见问题 :缓存雪崩,缓存击穿,缓存穿透,缓存预热 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 緩存雪崩
  • 緩存擊穿
  • 緩存穿透
  • 緩存預(yù)熱


緩存雪崩

緩存雪崩指的是在短時(shí)間內(nèi),有大量緩存的鍵同時(shí)過期,由于緩存過期,導(dǎo)致此時(shí)所有的請求就直接查詢數(shù)據(jù)庫,而數(shù)據(jù)庫很難抵擋這樣巨大的壓力,嚴(yán)重情況下就會導(dǎo)致數(shù)據(jù)庫被大流量打死,直接宕機(jī)。

下面是正常的查詢流程以及緩存雪崩后的查詢流程

緩存雪崩的解決方法有以下幾種

  • 隨機(jī)化過期時(shí)間,為了避免緩存同時(shí)過期,在設(shè)置緩存時(shí)在原有時(shí)間上添加隨機(jī)時(shí)間,使失效時(shí)間分散開來
  • 加鎖排隊(duì),加鎖排隊(duì)可以起到緩沖的作用,防止大量請求同時(shí)操作數(shù)據(jù)庫,但是也正因?yàn)槿绱艘矞p少了吞吐量,導(dǎo)致響應(yīng)時(shí)間變慢,用戶體驗(yàn)變差。
  • 設(shè)置二級緩存,即加入一個(gè)本地緩存作為備案,當(dāng)Redis緩存失效后就暫時(shí)使用本地緩存進(jìn)行代替,避免直接訪問數(shù)據(jù)庫。
  • 設(shè)置熱點(diǎn)數(shù)據(jù)永不過期,有更新操作時(shí)直接更新緩存即可
  • 緩存擊穿

    緩存擊穿與緩存雪崩很像,不過一個(gè)是針對大量緩存一個(gè)是針對熱點(diǎn)緩存。

    緩存擊穿即當(dāng)某個(gè)熱點(diǎn)緩存突然失效,而正好對其有著大量的請求,此時(shí)這些請求就會直接向數(shù)據(jù)庫進(jìn)行查詢,導(dǎo)致數(shù)據(jù)庫面臨巨大的壓力


    緩存擊穿的解決方法有以下幾種

  • 設(shè)置熱點(diǎn)數(shù)據(jù)永不過期,有更新操作時(shí)直接更新緩存即可
  • 加鎖排隊(duì),通過加鎖來減少同一時(shí)間的訪問量,緩解壓力

  • 緩存穿透

    緩存穿透是指查詢的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,(由于主鍵通常都是從1開始自增,此時(shí)大量查詢負(fù)數(shù)或者特別大的數(shù)據(jù)就會導(dǎo)致緩存穿透)。
    處于容錯(cuò)考慮,由于這些數(shù)據(jù)在數(shù)據(jù)庫中不存在,所以不會將結(jié)果保存到緩存中。而又因?yàn)榫彺嬷袥]有這些數(shù)據(jù),所以每次請求都會繞過緩存,直接向數(shù)據(jù)庫查詢,這就是緩存穿透

    緩存穿透的解決方法有以下幾種

  • 參數(shù)校驗(yàn),對于那些不合法的請求就直接返回空結(jié)果,不進(jìn)行查詢
  • 布隆過濾器,可以根據(jù)布隆過濾器來判斷數(shù)據(jù)在不在數(shù)據(jù)庫,雖然布隆過濾器查詢存在不一定準(zhǔn)確,但是如果布隆過濾器中查不到,則一定說明不存在,就不會進(jìn)入數(shù)據(jù)庫查詢
  • 緩存空結(jié)果,將每次查詢的結(jié)果進(jìn)行緩存,即使查詢不到的也緩存一個(gè)空結(jié)果,當(dāng)有非法請求時(shí)就直接返回空結(jié)果

  • 緩存預(yù)熱

    與上面三種不同,緩存預(yù)熱并不是一個(gè)需要解決的問題,而是一種優(yōu)化的策略,通過這種策略能夠更快的響應(yīng)用戶的查詢。

    緩存預(yù)熱指的是在啟動(dòng)系統(tǒng)的時(shí)候,提前將查詢的結(jié)果預(yù)存到緩存中,這樣用戶查詢時(shí)就可以直接從緩存中讀取,減少了用戶的等待時(shí)間

    緩存預(yù)熱的實(shí)現(xiàn)方法有以下三種

  • 把需要緩存的函數(shù)寫入到系統(tǒng)的構(gòu)造函數(shù)中,這樣系統(tǒng)就會在啟動(dòng)的時(shí)候自動(dòng)的加載數(shù)據(jù)并緩存數(shù)據(jù)
  • 把需要緩存的函數(shù)掛載到前端頁面或者后端的接口上,手動(dòng)觸發(fā)緩存預(yù)熱
  • 設(shè)置定時(shí)任務(wù),定時(shí)自動(dòng)進(jìn)行緩存預(yù)熱
  • 總結(jié)

    以上是生活随笔為你收集整理的Redis 缓存常见问题 :缓存雪崩,缓存击穿,缓存穿透,缓存预热的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。