架構師_程序員

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

查看: 386|回復: 0
打印 上一主題 下一主題

[Redis] 實例解讀什么是Redis緩存穿透、緩存雪崩和緩存擊穿

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2019-11-19 09:55:04 | 只看該作者
Redis緩存的使用,極大的提升了應用程序的性能和效率,特別是數據查詢方面。但同時,它也帶來了一些問題。其中,最要害的問題,就是數據的一致性問題,從嚴格意義上講,這個問題無解。如果對數據的一致性要求很高,那么就不能使用緩存。

另外的一些典型問題就是,緩存穿透、緩存雪崩和緩存擊穿。目前,業界也都有比較流行的解決方案。本篇文章,并不是要更加完美的解決這三個問題,也不是要顛覆業界流行的解決方案。而是,從實際代碼操作,來演示這三個問題現象。之所以要這么做,是因為,僅僅看這些問題的學術解釋,腦袋里很難有一個很形象的概念,有了實際的代碼演示,可以加深對這些問題的理解和認識。

緩存穿透

緩存穿透,是指查詢一個數據庫一定不存在的數據。正常的使用緩存流程大致是,數據查詢先進行緩存查詢,如果key不存在或者key已經過期,再對數據庫進行查詢,并把查詢到的對象,放進緩存。如果數據庫查詢對象為空,則不放進緩存。



代碼流程

  • 參數傳入對象主鍵ID
  • 根據key從緩存中獲取對象
  • 如果對象不為空,直接返回
  • 如果對象為空,進行數據庫查詢
  • 如果從數據庫查詢出的對象不為空,則放入緩存(設定過期時間)想象一下這個情況,如果傳入的參數為-1,會是怎么樣?這個-1,就是一定不存在的對象。就會每次都去查詢數據庫,而每次查詢都是空,每次又都不會進行緩存。假如有惡意攻擊,就可以利用這個漏洞,對數據庫造成壓力,甚至壓垮數據庫。即便是采用UUID,也是很容易找到一個不存在的KEY,進行攻擊。


小編在工作中,會采用緩存空值的方式,也就是【代碼流程】中第5步,如果從數據庫查詢的對象為空,也放入緩存,只是設定的緩存過期時間較短,比如設置為60秒。




緩存雪崩

緩存雪崩,是指在某一個時間段,緩存集中過期失效。

產生雪崩的原因之一,比如在寫本文的時候,馬上就要到雙十二零點,很快就會迎來一波搶購,這波商品時間比較集中的放入了緩存,假設緩存一個小時。那么到了凌晨一點鐘的時候,這批商品的緩存就都過期了。而對這批商品的訪問查詢,都落到了數據庫上,對于數據庫而言,就會產生周期性的壓力波峰。

小編在做電商項目的時候,一般是采取不同分類商品,緩存不同周期。在同一分類中的商品,加上一個隨機因子。這樣能盡可能分散緩存過期時間,而且,熱門類目的商品緩存時間長一些,冷門類目的商品緩存時間短一些,也能節省緩存服務的資源。




其實集中過期,倒不是非常致命,比較致命的緩存雪崩,是緩存服務器某個節點宕機或斷網。因為自然形成的緩存雪崩,一定是在某個時間段集中創建緩存,那么那個時候數據庫能頂住壓力,這個時候,數據庫也是可以頂住壓力的。無非就是對數據庫產生周期性的壓力而已。而緩存服務節點的宕機,對數據庫服務器造成的壓力是不可預知的,很有可能瞬間就把數據庫壓垮。

緩存擊穿

緩存擊穿,是指一個key非常熱點,在不停的扛著大并發,大并發集中對這一個點進行訪問,當這個key在失效的瞬間,持續的大并發就穿破緩存,直接請求數據庫,就像在一個屏障上鑿開了一個洞。

小編在做電商項目的時候,把這貨就成為“爆款”。

其實,大多數情況下這種爆款很難對數據庫服務器造成壓垮性的壓力。達到這個級別的公司沒有幾家的。所以,務實主義的小編,對主打商品都是早早的做好了準備,讓緩存永不過期。即便某些商品自己發酵成了爆款,也是直接設為永不過期就好了。

大道至簡,mutex key互斥鎖真心用不上。





上一篇:MySql 8.0 Either use a secure connection, specify the server's RSA...
下一篇:docker container 容器訪問外部宿主機服務
帖子永久地址: 

架構師_程序員 - 論壇版權1、本主題所有言論和圖片純屬會員個人意見,與本論壇立場無關
2、本站所有主題由該帖子作者發表,該帖子作者與架構師_程序員享有帖子相關版權
3、其他單位或個人使用、轉載或引用本文時必須同時征得該帖子作者和架構師_程序員的同意
4、帖子作者須承擔一切因本文發表而直接或間接導致的民事或刑事法律責任
5、本帖部分內容轉載自其它媒體,但并不代表本站贊同其觀點和對其真實性負責
6、如本帖侵犯到任何版權問題,請立即告知本站,本站將及時予與刪除并致以最深的歉意
7、架構師_程序員管理員和版主有權不事先通知發貼者而刪除本文

碼農網,只發表在實踐過程中,遇到的技術難題,不誤導他人。
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則

免責聲明:
碼農網所發布的一切軟件、編程資料或者文章僅限用于學習和研究目的;不得將上述內容用于商業或者非法用途,否則,一切后果請用戶自負。本站信息來自網絡,版權爭議與本站無關。您必須在下載后的24個小時之內,從您的電腦中徹底刪除上述內容。如果您喜歡該程序,請支持正版軟件,購買注冊,得到更好的正版服務。如有侵權請郵件與我們聯系處理。

Mail To:help@itsvse.com

QQ|Archiver|手機版|小黑屋|架構師 ( 魯ICP備14021824號-2 )|網站地圖

GMT+8, 2020-7-12 13:21

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表
捕鸟达人老版