一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - Redis擊穿穿透雪崩產生原因分析及解決思路面試

Redis擊穿穿透雪崩產生原因分析及解決思路面試

2022-03-09 22:22Q.E.D Redis

這篇文章主要為大家介紹了Redis擊穿穿透雪崩產生原因及解決思路的面試問題答案參考,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進步

 

1、前言

大家都知道,計算機的瓶頸之一就是IO,為了解決內存與磁盤速度不匹配的問題,產生了緩存,將一些熱點數據放在內存中,隨用隨取,降低連接到數據庫的請求鏈接,避免數據庫掛掉。需要注意的是,無論是擊穿還是后面談到的穿透與雪崩,都是在高并發前提下,比如當緩存中某一個熱點key失效。

Redis擊穿穿透雪崩產生原因分析及解決思路面試

 

2、問題起因 

有兩個主要原因:

  • 1、Key過期;
  • 2、Key被頁面置換淘汰。

對于第一個原因是因為在Redis中,Key有過期時間,如果某一個時刻(假如商城做活動,零點開始)key失效,那么零點之后對某一個商品查詢請求將全都壓到數據庫上,導致數據庫崩。

對于第二個原因,因為內存是有限的,要時時刻刻緩存新的數據,淘汰舊的數據,所以在一定的頁面置換策略(常見頁面置換算法圖解)中,淘汰數據,如果某些商品做活動之前無人問津,勢必會被淘汰。

 

3、應對擊穿的處理思路

正常的處理請求如圖:

Redis擊穿穿透雪崩產生原因分析及解決思路面試

由于key過期在所難免,高流量來到Redis時,根據Redis的單線程特性,可以認為任務是在隊列里依次執行的,當請求到達Redis發現Key過期時,進行一個操作:設置鎖。

這個流程大概如下:

  • 請求到達Redis,發現Redis Key過期,查看有沒有鎖,沒有鎖的話回到隊列后面排隊
  • 設置鎖,注意,這兒應該是setnx(),而不是set(),因為可能有其他線程已經設置鎖了
  • 獲取鎖,拿到鎖了就去數據庫取數據,請求返回后釋放鎖。

Redis擊穿穿透雪崩產生原因分析及解決思路面試

 但是引出了一個新的問題,如果拿到鎖去拿數據的請求然后掛了怎么辦?也就是鎖沒有釋放,其他進程都在等鎖,解決辦法是:

對鎖設置一個過期時間,如果到達了過期時間還沒釋放就自動釋放,問題又來了,鎖掛了好說,但是如果是鎖超時呢?也就是在設定的時間里數據沒有取出來,但是鎖由過期了,常見的思路是,鎖過期時間值遞增,但是想想不靠譜,因為第一個請求可能超時,如果后面的也超時呢,接連多次超時之后,鎖過期時間值勢必特別大了,這樣做弊端太多。

另外一個思路是,再開啟一個線程,進行監控,如果取數據的線程沒有掛的話,就適當延遲鎖的過期時間。

Redis擊穿穿透雪崩產生原因分析及解決思路面試

 

4、穿透 

穿透主要原因是很多請求都在訪問數據庫不存在的數據,例如一個賣書的商城一直被請求查詢茶葉產品,由于Redis緩存主要是用來緩存熱點數據,對于數據庫都不存在的數據,是沒法緩存的,這種異常流量就會直接到達數據庫并且返回"沒有"的查詢結果。

應對這種請求,處理辦法是對訪問請求加一層過濾器,例如布隆過濾器、增強版布隆過濾器、布谷鳥過濾器。

Redis擊穿穿透雪崩產生原因分析及解決思路面試

除了布隆過濾器,可以增加一些參數檢驗,例如數據庫數據id一般都是遞增的,如果請求 id = -10 這種參數,勢必繞過Redis,避免這種情況,可以對用戶真實性檢驗等操作。

 

5、雪崩 

雪崩,和擊穿類似,不同的是擊穿是一個熱點Key某時刻失效,而雪崩是大量的熱點Key在一瞬間失效,網絡上很多博客都在強調解決雪崩的策略是隨機過期時間,這個非常不準確,舉個例子,銀行做活動,之前這個利息系數為2%,過了零點系數改為3%,這種情況能將用戶的對應的key改為隨機過期嗎?如果用的過去的數據叫臟數據。

明顯不可以,同樣存錢f0c;你存到年底利息300萬,隔壁才200萬,這不得打架啊,開玩笑~

正確的思路是,首先要看看這個Key過期是不是時點性有關,時點性無關的話,可以隨機過期時間解決。

如果是時點性有關,例如剛剛說的銀行某一天改變某系數,那么就要利用強依賴擊穿方案,策略是先過去的線程更新一下所有key。

Redis擊穿穿透雪崩產生原因分析及解決思路面試

在后臺更新熱點key的同時,業務層將進來的請求延時一下,例如短暫的睡幾毫秒或者秒,給后面的更新熱點key分散壓力。

 

結束

以上就是Redis擊穿穿透雪崩產生原因及解決思路面試的詳細內容,更多關于Redis擊穿穿透雪崩解決的資料請關注服務器之家其它相關文章!

原文地址:https://blog.csdn.net/qq_34272760/article/details/121259508

延伸 · 閱讀

精彩推薦
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
主站蜘蛛池模板: 精品一区在线 | 护士videossexo另类 | 加勒比成人 | 男人j进女屁股视频在线观看 | 国产亚洲精品自在线亚洲情侣 | 四虎精品在线观看 | 午夜电影三级还珠格格 | 青青草国产精品久久碰 | www.毛片在线观看 | 桃子视频www| 日韩夫妻性生活 | 99re8在线精品视频免费播放 | a v在线男人的天堂观看免费 | 男人天堂2023| 婷婷99视频精品全部在线观看 | 午夜伦午夜伦锂电影 | 九九热在线视频 | 亚洲欧美国产自拍 | 波多野结衣作品在线观看 | 久久精品人人做人人爽97 | 男生和女生搞逼逼 | 日韩一区二区三区四区区区 | 国产主播99| 国产精品视频免费一区二区三区 | 精品无码久久久久久久动漫 | 免费在线看a | 亚洲国产精品ⅴa在线观看 亚洲国产高清一区二区三区 | 亚洲一卡2卡三卡4卡5卡组 | 精品一区二区视频 | 国产haodiaose最新 | 国产偷啪 | 轻轻操在线视频 | 麻豆小视频在线观看 | 学生小泬无遮挡女HD | 荷兰艾优apiyoo | 国产大片视频免费观看 | 日本高清免费看 | 国产精品成人亚洲 | 欧美日韩一二三区免费视频观看 | 涩情主播在线翻车 | 日日爱669|