1. 程式人生 > >常用場景下快取穿透,快取雪崩,快取併發處理策略

常用場景下快取穿透,快取雪崩,快取併發處理策略

快取通常使用方式是先查詢快取,快取沒有再查詢資料庫,資料庫有則設定進快取。 使用快取主要是降低資料庫的讀壓力,保護資料庫,假如出現以下場景就可能導致壓力全壓在資料庫上導致資料庫服務掛掉。 場景 1.遭受攻擊大量隨機生成的key訪問,或是真正訪問但資料庫就是沒資料 2.上線前沒有進行老資料快取預載入,大量老資料請求去查詢資料庫 3.熱點key失效,對熱點key的併發訪問大 4.快取失效,過期時間設定相同同一時間有大量key失效 5.快取掛掉,直接查資料庫 分析: ①如果是新業務上線沒有舊資料,來一條資料寫一條到資料庫並同步到快取 過期時間設定(永不過期): 場景解決方案: 1.由於沒有舊資料基本能夠保證正常要讀的資料都在快取中,只有更新資料前刪除快取的那一短暫時刻才會出現快取中不存 在,需要去資料庫中讀取的情況,在這種業務場景下如果從快取讀不到值,可以短暫的休息兩秒再去從快取讀取(更新線 程會設定成功),如果還讀不到(應該就是惡意攻擊)即刻返回,避免從資料庫中查詢。 2.不存在舊資料,因此不存在這種情況。 3.因為永不過期不存在此情況,在更新資料前會有短暫不存在,休息兩秒再次讀取。 4.因為永不過期不存在此情況 5.採用降級熔斷措施 過期時間設定(有過期時間
): 場景解決方案: 1.因為無法分辨正常訪問還是攻擊,過載只能降級處理,或按比例透過請求,資料庫沒有查詢到的存空值到快取,如果是惡 意攻擊的會有大量垃圾資料,如果是真正訪問但資料庫就是沒資料則此方式有效,為了防止垃圾佔用時間過長,設定比較短 的過期時間 2.因為無法分辨老新還有是否是攻擊,處理方式同1,只不過此時老資料能查詢到資料,對於有資料的設定較長的過期時間。 3.使用分散式鎖,只讓一個執行緒去載入資料 4.快取過期時間設定不同,太大量也要做降級處理 5.採用降級熔斷措施 ②如果業務上線前有舊資料並且沒有提前載入到快取 過期時間設定(永不過期): 場景解決方案: 1.由於有資料只存在資料庫而沒存在快取中,因此無法分辨是攻擊還是正常請求,如果訪問量巨大隻能降級或熔斷,查詢不 到的資料向快取中設定空值並設定較短的過期時間,根本的解決方案是啟動任務將沒有放入快取中的資料放到快取中。 2.同1無法分辨是老資料還是攻擊 3.熱點key提前載入,使用分散式鎖,只讓一個執行緒去載入資料(更新快取前刪除那一霎那) 4.不存在過期,因此不存在這種情況 5.降級熔斷 過期時間設定(有過期時間
場景解決方案: 1.因為無法分辨正常還是攻擊,過載只能降級處理,按比例透過請求,資料庫沒有的存空值,如果是惡意攻擊的會有大量垃 圾資料,如果是真正訪問但資料庫就是沒資料則此方式有效,為了防止垃圾佔用時間過長,設定比較短的過期時間 2.無法分辨是請求老資料還是攻擊,處理方式同1,只不過此時能查詢到資料,對於有資料的設定較長的過期時間。 3.分散式鎖,只讓一個執行緒去載入資料 4.快取過期時間設定不同,太大量也要做降級處理 5.採用降級熔斷措施 其中場景1,2叫做快取穿透,即訪問資料庫中根本沒有的值。 場景3叫做快取併發或者熱點key失效。 場景4叫做快取雪崩。 對於經常使用但變化很少的key要設定為永不過期,如果業務量小,建議儘可能多的設定為永不過期,放一次快取多麻煩,既然都放裡了為什麼要讓他過期。但是對於訪問量大的業務,還是要合理設定過期時間,不然快取爆調壓力還是到庫。

微信公眾號 IT農廠【ITFF01】



相關推薦

常用場景快取穿透快取雪崩快取併發處理策略

快取通常使用方式是先查詢快取,快取沒有再查詢資料庫,資料庫有則設定進快取。 使用快取主要是降低資料庫的讀壓力,保護資料庫,假如出現以下場景就可能導致壓力全壓在資料庫上導致資料庫服務掛掉。 場景 1.遭受攻擊大量隨機生成的key訪問,或是真正訪問但資料庫就是沒資料 2.上線

jquery點擊一組按鈕中的一個跳轉至對應頁面處理策略。(如點擊訂單列表中的一個訂單跳轉至該訂單的詳情)

跳轉 () 列表 操作 進行 斷點 cat 訂單 一個 將改組按鈕的數據設置一個相同的屬性(如class),然後每個按鈕設置不同的id 當用戶點擊屬性為class的按鈕,根據id屬性來判斷點擊的是哪個按鈕,然後進行相關操作。 代碼示例: <script> $("

SQL Server與MySQL在“存在則更新不存在則插入”併發處理上的一些差異。

“存在則更新,不存在則插入的邏輯”併發情況下的處理 在sqlserver中: 在sqlserver中,是通過可序列化隔離級別+排它鎖的方式來鎖定一個範圍來實現的當前鎖定一個不存在的記錄的時候,sqlserver是通過範圍鎖來實現的,具體鎖定的範圍,表中已存在的資料和當前具體判斷的Id有關參考之前寫的一

Python實戰之協程(greenlet模組gevent模組socket+ gevent實現高併發處理

協程 協程,又稱微執行緒,纖程。英文名Coroutine。一句話說明什麼是執行緒:協程是一種使用者態的輕量級執行緒。(cpu不知道,是使用者自己控制的) 協程擁有自己的暫存器上下文和棧。協程排程切換時,將暫存器上下文和棧儲存到其他地方,在切回來的時候,恢復先前儲存的暫存器上下文和棧(執行緒的

Redis常用場景、資料結構、讀寫一致、快取穿透快取雪崩

一、分散式系統為什麼要用Redis 1、效能 我們在碰到需要執行耗時特別久,且結果不頻繁變動的 SQL,就特別適合將執行結果放入快取。這樣,後面的請求就去快取中讀取,使得請求能夠迅速響應。 2、併發 在大併發的情況下,所有的請求直接訪問資料庫,資料庫

曹工說JDK原始碼(4)--抄了一小段ConcurrentHashMap的程式碼我解決了部分場景的Redis快取雪崩問題

[曹工說JDK原始碼(1)--ConcurrentHashMap,擴容前大家同在一個雜湊桶,為啥擴容後,你去新陣列的高位,我只能去低位?](https://www.cnblogs.com/grey-wolf/p/13057567.html) [曹工說JDK原始碼(2)--ConcurrentHashMap的

10月13日快取穿透快取擊穿快取雪崩

前言 設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。   快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,

快取穿透快取擊穿快取雪崩解決方案分析

前言 設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。 快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能D

Redis 快取穿透快取擊穿快取雪崩的解決方案分析

設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。 一.什麼樣的資料適合快取? 分析一個數據是否適合快取,我們要從訪問頻率、讀寫比例、資料一致性等要求去分析.  二.什麼是快取擊穿 在高併發下,多執行緒同時查詢同一個資源,如果快取中沒有這個資源,那麼這些執行緒都會去資料庫

快取穿透快取失效(快取雪崩)和快取併發

快取穿透: 通常快取都是根據key去查詢value,如果快取中不存在,則去DB中查詢,如果查詢到了則將此key->value寫入快取。但是,對於某些一直不存在的資料,每次都無法在快取中查詢到,所

面試必備:快取穿透快取雪崩的四種解決方案

前言 設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。 快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取

什麼是快取穿刺和快取雪崩?如何解決快取穿透快取雪崩

作為參考使用,以便查閱。 一.快取穿透:      快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,造成快取穿透。  &nbs

快取穿透快取雪崩快取擊穿解決方案分析

前言 設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。 快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查

快取雪崩快取穿透解決方案

快取雪崩 快取雪崩可能是因為資料未載入到快取中,或者快取同一時間大面積的失效,從而導致所有請求都去查,導致CPU和記憶體負載過高,甚至宕機。 解決思路: 1,採用加鎖計數,或者使用合理的佇列數量來避免快取失效時對資料庫造成太大的壓力。這種辦法雖然能緩解資料庫的壓力,但是同時

redis學習系列--Redis 高併發快取穿透問題解決方案

下面這段程式碼 如果1W個人同時訪問的話,  從redis 拿 allUser 時, userList為空時,那麼1W個人都要進入if判斷語句,查詢資料庫,資料庫壓力承受不住 package com.

redis快取穿透快取擊穿快取雪崩原因+解決方案

一、前言 在我們日常的開發中,無不都是使用資料庫來進行資料的儲存,由於一般的系統任務中通常不會存在高併發的情況,所以這樣看起來並沒有什麼問題,可是一旦涉及大資料量的需求,比如一些商品搶購的情景,或者是主頁訪問量瞬間較大的時候,單一使用資料庫來儲存資料的系統會因為面向磁碟,磁碟讀/寫速度比較慢的問題而存在嚴

【大廠面試01期】高併發場景如何保證快取與資料庫一致性?

> PS:本文已收錄到1.1K Star數開源學習指南——《大廠面試指北》,如果想要了解更多大廠面試相關的內容及獲取《大廠面試指北》離線PDF版,請掃描下方二維碼碼關注公眾號“大廠面試”,謝謝大家了!專案地址:https://github.com/NotFound9/interviewGuide **

快取穿透、擊穿、雪崩什麼的傻傻分不清楚?看了這篇文後我明白了

對於快取,大家肯定都不陌生,不管是前端還是服務端開發,快取幾乎都是必不可少的優化方式之一。在實際生產環境中,快取的使用規範也是一直備受重視的,如果使用的不好,很容易就遇到快取擊穿、雪崩等嚴重異常情景,從而給系統帶來難以預料的災害。 為了避免快取使用不當帶來的損失,我們有必要了解每種異常產生的原因和解決辦法

快取中使用的問題:快取穿透+快取擊穿+快取雪崩

1.  快取穿透:     條件:訪問一個不存在的資料;     說明:當訪問一個不存在的資料時,因為快取中沒有這個key,導致快取形同虛設,最終訪問後臺資料庫,但是資料庫中沒有該資料,所以返回null;     隱患:如果有人惡意頻繁查詢一個不存在的資料,可能會導致資料庫負載高導致宕機;     總

memcache快取雪崩快取無底洞、快取穿透、永久資料被踢現象

一.快取雪崩現象   快取雪崩一般是由某個快取節點失效,導致其他節點的快取命中率下降, 快取中缺失的資料去資料庫查詢,短時間內造成資料庫伺服器崩潰,     重啟DB短期又被壓跨,但新資料的快取也更新一些,DB反覆多次啟動多次,快取重建完畢,DB才穩定執行,或者