激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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
主站蜘蛛池模板: 日本黄网| 国产亚洲精品久久午夜玫瑰园 | 日韩av片在线播放 | 精品成人av一区二区在线播放 | 亚洲日本韩国在线观看 | 久久久一区二区三区四区 | 国产精品片一区二区三区 | 在线成人www免费观看视频 | 国产精品成人一区二区三区电影毛片 | 91在线免费观看 | 色妞色视频一区二区三区四区 | 中文字幕 亚洲一区 | 欧美成人一级片 | 欧美精品在线免费观看 | 国产精品免费av一区二区三区 | 新久草在线视频 | 爽爽视频免费看 | 国产精品美女久久久久久不卡 | 黄色免费电影网址 | 久久久久国产成人免费精品免费 | 亚洲国产精品一区二区三区 | 色中色综合 | av电影在线网 | 久久久久九九九女人毛片 | 国产精品久久久久久久四虎电影 | 国产精品视频一区二区三区综合 | 国产理论视频在线观看 | 草草影院地址 | 免费观看一级黄色片 | 黄免费在线 | 黄色伊人网站 | 欧美a级大胆视频 | 亚洲人成网站在e线播放 | 欧美性激情视频 | 久久凹凸 | 国产91久久久久久 | 黄色大片在线免费观看 | 国产999视频在线观看 | 久久久一区二区三区视频 | 成人免费久久网 | 亚洲特黄a级毛片在线播放 久久久入口 |