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

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

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
主站蜘蛛池模板: 色老板视频在线观看 | 国产一二三区视频 | 免费看国产精品久久久久 | 欧美日韩国产在线人成dvd | 成人影院vs一区二区 | aa一级护士医生毛片 | 天天干天天日天天射天天操毛片 | 国产3344视频在线观看免费 | 免费观看俄罗斯特黄特色 | 性欧美f| 2020年国产精品午夜福利在线观看 | 午夜一区二区三区 | 免费片在线观看高清 | 成年男女免费大片在线观看 | 日韩伦理在线看 | 日本不卡一区二区三区在线观看 | 3d蒂法精品啪啪一区二区免费 | 麻生希在线 | 国产自拍视频一区 | 特大黑人娇小亚洲女mp4 | 亚洲高清国产品国语在线观看 | 欧美草比视频 | 国产精品亚欧美一区二区三区 | 欧美在线观看网址 | 亚洲 欧美 中文 日韩 视频 | 紧身短裙女教师波多野 | 成年人视频在线免费看 | 秋霞一级| 亚洲四虎永久在线播放 | 国产青草亚洲香蕉精品久久 | 网站在线观看 | 欧美最猛性xxxxx动态图 | 日韩在线 中文字幕 | 日韩精品1 | 四虎色影院| 女女性恋爱视频入口 | 日本公乱妇视频 | 三极黄色 | 亚洲欧美天堂综合久久 | 人人澡人 | 98免费视频 |