精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

糟糕!緩存擊穿,商詳頁進不去了

數據庫
今天和大家一起聊聊緩存擊穿雪崩的話題,我們會對布隆過濾器做一個重點的介紹,因為這個也是比較常用的方式緩存擊穿的方式。

故事

對于小貓來講,最近的一段日子是不好過的,縱使聽著再有節拍的音樂,也換不起他對生活的熱情。由于上一次“冪等事件”躺槍,他已經有幾天沒有休息好了。他感覺人生到了低谷。

當接手這個商城項目之后,他感覺他一直沒有好過。他的內心彷徨,在工位上邊寫著事故報告,邊嘀咕著“今年到底是犯了啥沖...為什么...”

然而屋漏又遭連夜雨,船破偏遇當頭風,好像壞事兒又找上了他。

坐他旁邊的哥們在一旁抱怨,“啥情況,我就想給公司助助力,買點咱自家公司的產品,咋商詳頁咋點來點去進不了,你看看你的呢?”。

“你自己手機不行了吧,你瞧你那老破爛也該換了,iphone15 pmax搞起...” 旁邊的老六開涮道。

然而卻觸動了小貓的神經,他趕緊打開app,發現自己的也進不去了。他趕緊打開Grafana,臉色蒼白,口干舌燥....數據庫連接全部打滿。

不到一會組長的電話也收到了客服反饋的客訴,組長向小貓投來質疑的目光。

小貓無辜而又無奈:“我真的沒有動過代碼......”。

經過一輪徹徹底底地摸排,事情的原因也終于水落石出。

大概如下圖這么回事兒:

流程

上次A公司對接商城服務之后開始在他們商城平臺推拼團售賣活動,活動中的幾個商品的緩存被刪除之后沒有恢復,原因是因為第三方對接的API商品大量推送,隊列有堆積,導致redis緩存并沒有及時更新。大批量的用戶在進行購買活動商品的時候,請求全部打到了DB上。

反正也不曉得是哪個挨千刀的設計的技術方案,緩存到redis中的時候用的居然是異步消息隊列。商品發布量小,訪問量小的時候可能沒有什么問題。

但是偏偏各種巧合發生在了一起就產生了這樣一個事故,這可能就是所謂的墨菲定律吧。

小貓已經走到了絕望的邊緣......(下次就不說小貓踩坑了,讓他緩幾天,哈哈)

二、聊聊緩存擊穿

在此我們對小貓表示同情,但是這是一個很好的例子,老貓還是和大家一起聊聊緩存擊穿雪崩的話題。

咱們就從以下幾個方面聊聊緩存雪崩擊穿的問題。

概覽圖

在上圖中可以看見,我們會對布隆過濾器做一個重點的介紹,因為這個也是比較常用的方式緩存擊穿的方式。

1.什么是緩存擊穿?是什么原因導致的?

從上面小貓的案例中,其實就已經很明了了,所謂緩存擊穿就是原本由于緩存組件抗住的流量結果全部打到了數據庫層,給數據庫帶來了巨大的壓力,甚至嚴重的情況下直接把數據庫干跨。導致緩存失效的原因也是很顯然易見的,由于緩存在一個無法預期的一個場景下緩存失效了。

在小貓的案例中可以看到是熱賣的商品在redis中Key值全部同時失效導致的。當然這是一種常見的技術方案有問題導致的。那么還有一種導致緩存失效的原因就是緩存中間件直接宕機。這種情況是運維層面需要解決的,可能要求對緩存中間件做好高可用,如何做高可用,我們在此不做深究。

下面是咱們的緩存用法,大家可以看一下下面的流程。

緩存流程

從上述的流程圖中我們可以看到,當有請求過來的時候,首先會嘗試從緩存中去讀取,當緩存中沒有讀到的時候,這個時候咱們就會回源到數據庫再次查找,當查到相關商品數據之后返回給客戶端,之后并將該數據繼續緩存到數據庫中。

接下來咱們來看一下發生雪崩之后的解決方案。

2.無效key值處理

這種情況其實很簡單了,既然由于沒有在緩存數據庫中找到數據,那么咱們也不應該直接將redis中那些Key值直接刪除,這樣找不到key的話,肯定還是會打到數據庫,所以我們只要避免請求去查數據庫就可以了。所以我們就把無效的Key也保存到redis中即可。這種值的話,我們都保存成“null”。這樣的話redis中的key一定就是全量的了,客戶端查詢數據的時候頂多也就是查不到。

這種方案可能會影響到用戶體驗,我們對這個方案其實也可以做一下改造,就是利用異步定時任務重新檢測緩存中為null的數據,異步去刷新數據到redis中。但是還是沒有從根本解決客戶體驗的問題,只是盡量降低客戶的不滿意度。大概流程如下。

無效key+定時任務

這種方案的缺點就是存在用戶體驗問題。

另外的這種方案還有一個缺點,大家思考一下,我們將失效的key以null值的形式緩存到redis中,但是如果有個惡意攻擊的行為,專門挑一些隨機的key去攻擊我們的接口的時候,請求是不是還是最終會打到數據庫,所以這種方案不是萬無一失的也不是最好的,提到的布隆過濾器則不會存在這樣的問題,后面我們再看。

3.互斥鎖方案

我們看到導致數據庫雪崩是由于請求太大穿透到數據庫,那么我們可以在訪問數據庫的時候動動腦筋。我們可以在訪問數據這個環節中加鎖,雖然影響性能,但是對于系統來說是安全的。這種方案和無效key方案進行組合之后其實可以用來作為兜底方案,搭配使用其實效果也不錯的。我們來看下圖。

緩存回源加鎖

這種情況就是在上面的標準緩存流程中回溯數據庫的地方利用redis的特性 setNx加了一把互斥鎖,這樣的話,咱們能夠盡量保證少量的請求打到數據庫中。

大白話可以這么理解,張三李四去同時去訪問同一個商品的時候,他們兩只有一個能成功,成功拒絕了并發時候針對同一個熱門商品的訪問。

4.熱點數據限流訪問

關于這個,我想其實可以不做太多展開,思路很簡單,既然是由于請求量太大,導致不走緩存走到了DB,從而將DB打垮,那么咱們就限流量唄。請求量少了,那么自然不會打垮數據庫了。關于限流的一些措施以及算法,其實老貓以前也寫過文章進行介紹過。所以在此也不做贅述。

5.布隆過濾器

如果用上布隆過濾器的話,那么我們方案如下調整。

系統在初始化的時候將key初始化到布隆過濾器中。當查詢的時候,把布隆過濾器放到查詢redis緩存之前,如果發現存在Key在布隆過濾器中,那么就繼續后續的流程,如果不存在則根本就連摸緩存的機會都沒有,更別提數據庫了,這樣就成功避免了惡意采用無用的key值進行攻擊。

6.什么是布隆過濾器

關于布隆過濾器,老貓在此也展開說一下,因為老貓覺得這個可能是這些防雪崩方案中最好的一種方案。那么咱們來看一下什么是布隆過濾器。

這種過濾器是一個叫做Bloom的哥們于1970年提出的,咱們可以把它看做由二進制向量(或者說位數組)和一系列隨機映射函數(哈希函數)兩部分組成的數據結構。位數組即(bit數組),bit是計算機中最小的單位,也就是我們常說的計算機中的0和1,這種就是用一個位來表示的。

Bit數組大概長的就是如下這樣的。

bit數組

位數組中的每個元素都只占用 1 bit , 并且每個元素只能是0 或 1 。這樣申請一個 100w 個元素的位數組只占用 1000000Bit / 8 = 125000 Byte = 125000 / 10214 kb ≈ 122kb 的空間。所以占用空間極小。

7.布隆過濾器原理

其基本原理是利用多個哈希函數,將一個元素映射成多個位,然后將這些位設置為 1。當查詢一個元素時,如果這些位都被設置為 1,則認為元素可能存在于集合中,否則肯定不存在。所以,布隆過濾器可以準確的判斷一個元素是否一定不存在,但是因為哈希沖突的存在,所以他沒辦法判斷一個元素一定存在。只能判斷可能存在。

如下圖:

添加元素的流程:

  • 針對相同的key通過不同的hash計算,算出不同的值。
  • 分別更新數組中的數據值為1。

查詢元素的流程。例如上圖,當查詢一個不存在的Key3的時候,調用hash1以及hash2函數,恰好命中了之前key1和key2的hash值,此處我們就有可能誤判覺得Key3值也是存在的。這樣的話也會打到后續流程中去做查詢的業務動作。

8.手擼一個簡單的java布隆過濾器

丐版的布隆過濾器的實現方式其實還是比較容易的。如下源碼:

/**
 * @author 公眾號:程序員老貓
 * @date 2024/1/18 23:30
 */
public class BloomFilter {
    /**
     * 初始化大小
     */
    private static final int DEFAULT_SIZE = 2 << 24;
    /**
     * 位數組。數組中到元素只能是 0 和 1
     */
    private BitSet bits = new BitSet(DEFAULT_SIZE);
    /**
     * 計算hash值
     * @param key
     * @return
     */
    static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : Math.abs((h = key.hashCode()) ^ (h >>> 16));
    }
    /**
     * 添加元素到位數組
     */
    public void add(Object value) {
        bits.set(hash(value), true);
    }
    /**
     * 判斷指定元素是否存在于位數組
     */
    public boolean contains(Object value) {
        return bits.get(hash(value));
    }
}

寫個main函數測試一下:

/**
 * @author 公眾號:程序員老貓
 * @date 2024/1/18 23:33
 */
public class Test {
    public static void main(String[] args) {
        String value1 = "https://blog.ktdaddy.com/";
        String value2 = "kdaddy2";
        BloomFilter filter = new BloomFilter();
        System.out.println(filter.contains(value1));
        System.out.println(filter.contains(value2));
        filter.add(value1);
        filter.add(value2);
        System.out.println(filter.contains(value1));
        System.out.println(filter.contains(value2));
    }
}

結果輸出也很簡單:

  false
  false
  true
  true

9.其他第三方布隆過濾器

當然Java中還可以使用第三方庫來實現布隆過濾器,常見的有Google Guava庫和Apache Commons庫以及Redis。關于這兩種過濾器的用法,老貓在此就不做贅述了,篇幅過長,大家可能都會喪失讀下去的欲望了,所以就到此打住,感興趣的小伙伴可以自行去找一下相關的資料,然后寫個demo玩玩。

寫在最后

上述基于小貓的痛苦之上給大家分享了緩存擊穿的一系列的解決方案,如果大家還有補充的話,也歡迎大家能夠在評論區留言。有個問題想問一下大家,當你新接手一個你不熟悉的項目的時候,你做的第一件事情是什么?

先說一下老貓自己吧,我一般會將現有的業務模型梳理一下,即相關的表結構,然后將核心的流程畫一畫,繼而通過一些列新的迭代慢慢熟悉整個系統,當然在此期間其實也會遇到小貓這樣的各種各樣的坑,無論是技術方案的坑還是說代碼的坑。其實老貓還是比較喜歡“早發現早治療”這種方式,發現問題,盡早解決掉,個人還是比較抵觸現在網上比較流行的說法“防御式編程”。因為如果有問題等到真的爆發的時候,有可能就是災難性的。

責任編輯:趙寧寧 來源: 程序員老貓
相關推薦

2023-07-27 07:00:01

轉轉門店商編程

2019-10-12 14:19:05

Redis數據庫緩存

2023-03-10 13:33:00

緩存穿透緩存擊穿緩存雪崩

2019-11-05 14:24:31

緩存雪崩框架

2020-03-16 14:57:24

Redis面試雪崩

2021-06-05 09:01:01

Redis緩存雪崩緩存穿透

2022-03-08 00:07:51

緩存雪崩數據庫

2022-05-27 07:57:20

緩存穿透緩存雪崩緩存擊穿

2022-11-18 14:34:28

2023-01-31 08:37:11

緩存穿透擊穿

2025-06-30 01:55:00

2023-11-10 14:58:03

2011-08-29 15:58:58

2009-11-10 10:50:15

2024-03-12 10:44:42

2011-09-06 09:48:32

192.168.1.1192.168.1.1設置路由器

2011-09-09 10:43:39

2023-04-14 07:34:19

2023-11-08 13:05:23

AI模型

2021-12-25 22:28:27

緩存穿透緩存擊穿緩存雪崩
點贊
收藏

51CTO技術棧公眾號

av在线亚洲天堂| 香蕉久久久久久久| 樱花草涩涩www在线播放| 久久九九影视网| 91久久国产综合久久91精品网站 | 精品久久久久久久久久久久久久久久久久| 国产一区二区亚洲| 日韩欧美国产成人一区二区| 18禁男女爽爽爽午夜网站免费| 午夜在线视频播放| 成人免费视频app| 国产精品久久久久久久久久小说| 日韩a级片在线观看| 99精品在线看| 在线不卡欧美| 色狠狠久久aa北条麻妃| 亚洲美女精品视频| 123成人网| 亚洲国产精品久久久久秋霞影院| 亚洲第一综合| 深夜福利视频网站| 精品亚洲免费视频| 日本欧美一级片| 久久免费精彩视频| 日韩免费在线| 亚洲区免费影片| 波多野结衣办公室双飞 | 成人好色电影| 不卡视频一二三四| 51成人做爰www免费看网站| 亚洲精品国产欧美在线观看| 精品9999| 欧美大成色www永久网站婷| 日本成人免费视频| 麻豆成人入口| 精品噜噜噜噜久久久久久久久试看| 天天干天天综合| 快播电影网址老女人久久| 天天av天天翘天天综合网 | av毛片在线播放| 中文av字幕一区| 欧美亚洲丝袜| 三区在线视频| 99久久精品国产麻豆演员表| 国产高清在线一区| 超碰在线人人干| 国产乱人伦精品一区二区在线观看| 国产精品久久久久久久久久ktv| 久久久久久久黄色片| 亚洲国产第一| 国内精品小视频在线观看| 中文字幕av免费在线观看| 亚洲91精品| 日韩在线不卡视频| 夫妻性生活毛片| 亚洲国产精品91| 久久久精品一区二区| 制服丨自拍丨欧美丨动漫丨| 久久人体视频| 美女视频久久黄| 欧美精品99久久久| 在线日韩电影| 欧美一级电影久久| 手机av免费观看| 日韩精品一级二级| 国产精品视频不卡| 国产精品久久久久久久免费看 | 91精品又粗又猛又爽| 超碰cao国产精品一区二区| 欧美videos大乳护士334| 国产综合内射日韩久| 精品福利一区| 亚洲欧美三级在线| 男人晚上看的视频| 国产一区清纯| 久久免费视频在线| 一级片视频在线观看| 日韩成人午夜精品| 成人做爽爽免费视频| 亚洲乱色熟女一区二区三区| 99视频国产精品| 日韩在线三区| sm国产在线调教视频| 亚洲国产一区二区a毛片| 黄色免费视频大全| 黄色成人在线观看网站| 欧美一区二区啪啪| 成人无码www在线看免费| 日本一二区不卡| 欧美日韩爱爱视频| www.国产毛片| 国产成a人亚洲| 日日夜夜精品网站| 伊人手机在线| 日本高清不卡在线观看| 日本黄色一级网站| 网友自拍区视频精品| 久久精品国产一区| 国产精品一区二区6| 久久99精品久久久| 久久久久久久久久久久久久一区 | 日韩欧美字幕| 97视频在线观看视频免费视频| 日本精品入口免费视频| 国产91在线观看丝袜| 日韩和欧美的一区二区| 成人在线免费观看黄色| 精品视频在线免费| 日本黄色录像片| 在线国产一区二区| 国产成人在线精品| 人妻一区二区三区四区| 亚洲色欲色欲www| 情侣黄网站免费看| eeuss国产一区二区三区四区| 亚洲一级黄色片| 日本少妇激情视频| 国产一区二区女| 色婷婷精品国产一区二区三区| av电影在线免费| 日韩丝袜美女视频| 97精品在线播放| 久久久亚洲人| 精品不卡在线| 成人女同在线观看| 日韩欧美你懂的| 二区三区四区视频| 日本vs亚洲vs韩国一区三区| 久久国产欧美精品| 久久av色综合| 日韩精品影音先锋| 男人的午夜天堂| 美女视频一区二区三区| 欧美一区二区三区在线播放 | 一本色道久久综合亚洲91 | 国产又粗又长又黄| 国产精品污www在线观看| 干日本少妇首页| 久久中文字幕导航| 欧美激情在线观看视频| 亚洲a视频在线观看| 亚洲摸摸操操av| 激情文学亚洲色图| 欧美hentaied在线观看| 国产视频福利一区| 麻豆视频在线免费观看| 欧美精品v日韩精品v韩国精品v| 免费看的黄色录像| 毛片av一区二区| 一区二区三区观看| **日韩最新| 久久综合五月天| 亚洲第一视频在线| 亚洲国产aⅴ天堂久久| 国产大尺度视频| 影音先锋国产精品| 欧美激情视频一区二区三区| 忘忧草在线影院两性视频| 亚洲欧洲国产一区| 最近中文字幕av| 国产精品短视频| 国产999免费视频| 国精品一区二区| 精品免费视频123区| 成人免费看黄| 日韩在线视频国产| 99热这里只有精品3| 亚洲国产视频网站| 久久久无码人妻精品一区| 久久久噜噜噜| 一区二区三区在线视频111| 嫩呦国产一区二区三区av| 欧美激情高清视频| 天堂视频中文在线| 欧美日韩在线播放一区| 欧美成人精品欧美一级私黄| 99久久国产免费看| 国产又大又黄又猛| 黄色另类av| 欧美综合77777色婷婷| 欧美日韩免费电影| 欧美极品第一页| 精品资源在线看| 3d成人h动漫网站入口| 国产精品自拍视频一区| 久久精品综合网| 亚洲精品国产久| 亚洲制服少妇| 中文字幕久久一区| 久久久久观看| 91精品国产综合久久香蕉922| 高清在线视频不卡| 精品国产一区二区三区久久狼黑人| av综合在线观看| 一本久道久久综合中文字幕| av成人免费网站| 26uuuu精品一区二区| 91亚洲一区二区| 亚洲综合另类| 日本道在线视频| 精品免费av| 国产日韩三区| 精品视频一区二区三区| 国产成人欧美在线观看| 一区二区三区伦理| 在线丨暗呦小u女国产精品| 黑人乱码一区二区三区av| 欧美美女一区二区| 丁香六月婷婷综合| 亚洲国产一区二区三区青草影视| 激情高潮到大叫狂喷水| 久久久影院官网| 久草视频福利在线| 久久成人18免费观看| 国产1区2区在线| 在线观看不卡| 国产树林野战在线播放| 成人午夜国产| 欧美色欧美亚洲另类七区| 高潮久久久久久久久久久久久久| 国产在线视频不卡| 全球最大av网站久久| 7777免费精品视频| 俄罗斯一级**毛片在线播放| 不卡av在线网站| 麻豆传媒在线免费看| 在线播放精品一区二区三区| 久久久资源网| 亚洲精品自在久久| 天天摸夜夜添狠狠添婷婷| 精品精品国产高清a毛片牛牛| 国产毛片一区二区三区va在线| 在线欧美一区二区| 人人爽人人爽人人片av| 欧美体内谢she精2性欧美| 日韩人妻无码一区二区三区99| 玉足女爽爽91| 午夜写真片福利电影网| 亚洲综合久久久久| 免费在线观看黄色av| 一区二区在线观看不卡| 国产女人18水真多毛片18精品| 国产精品精品国产色婷婷| 黄大色黄女片18免费| 国产免费成人在线视频| 欧美日韩生活片| 国产精品九色蝌蚪自拍| 97在线观看免费高| 亚洲男人电影天堂| 欧美成人aaa片一区国产精品| 亚洲精品久久久蜜桃| 999精品在线视频| 亚洲男人都懂的| 免费观看一级视频| 午夜电影一区二区三区| www.av麻豆| 日韩欧美主播在线| 91porny九色| 欧美疯狂性受xxxxx喷水图片| 国产999久久久| 亚洲国产高潮在线观看| 色中色在线视频| 国产一区二区三区久久精品| 亚洲s色大片| 欧美成人在线网站| 98色花堂精品视频在线观看| 清纯唯美亚洲激情| 精品成人免费一区二区在线播放| 成人精品一区二区三区| 88久久精品| 极品校花啪啪激情久久| 精品国产一级毛片| 免费观看黄色的网站| 亚洲国内精品| 91香蕉视频污版| 国产一区二区调教| av2014天堂网| 中文字幕av一区二区三区| 免费无遮挡无码永久在线观看视频 | 精品一区二区三区自拍图片区| 尤物tv在线精品| 正在播放精油久久| 99国产精品99久久久久久粉嫩| 日韩有码免费视频| 国产乱国产乱300精品| 国产激情第一页| 国产欧美精品一区二区色综合| 欧美三级黄色大片| 精品人伦一区二区三区蜜桃免费| 亚洲性猛交富婆| 欧美成人综合网站| 国产在线你懂得| 欧美黑人性生活视频| 色婷婷综合久久久中字幕精品久久| 91亚洲国产成人久久精品网站| 女同另类激情重口| 国产一二三四五| 日韩不卡一区二区三区 | 一区二区的视频| 日韩黄色高清视频| a毛片在线看免费观看| 国产成人涩涩涩视频在线观看 | 欧美在线一区二区三区四区| 欧美深夜福利| 色婷婷.com| 久久久.com| 在线看成人av| 日韩一区二区在线播放| 成人午夜在线观看视频| 97在线精品视频| 日本一区二区三区电影免费观看| 日本一区美女| 国产欧美一区二区三区国产幕精品| 在线免费看污网站| 欧美国产激情二区三区| 欧美一区二区激情视频| 日韩一区二区三区在线| 日韩在线观看www| 国产成人激情小视频| 久久夜色精品国产噜噜av小说| 欧美少妇一级片| 免费人成精品欧美精品| 91精品人妻一区二区| 亚洲国产va精品久久久不卡综合| 99视频免费看| 日韩视频免费大全中文字幕| 深夜视频一区二区| 日本一区二区三不卡| 久久夜色精品| 一卡二卡三卡四卡| 精品成人在线视频| 亚洲经典一区二区三区| 久久99热这里只有精品国产 | 日韩成人午夜精品| 成人国产精品久久久网站| 欧美性猛交xxxx黑人| 污视频网站免费观看| 国模精品一区二区三区色天香| 亚洲三区欧美一区国产二区| 潘金莲一级淫片aaaaaa播放1| 精品亚洲porn| 2025国产精品自拍| 欧美一区二区三区播放老司机| gogogogo高清视频在线| 亚洲自拍偷拍一区| 欧美成人一品| 国产av一区二区三区传媒| 亚洲一区二区三区美女| 色婷婷av一区二区三| 欧美极品少妇xxxxⅹ喷水| 黄色成人美女网站| 久艹视频在线免费观看| 99视频在线观看一区三区| 九一国产在线观看| 在线观看不卡av| 日韩福利在线观看| 久久久成人精品一区二区三区| 国产精品77777| 国产精品30p| 日韩精品在线私人| 日韩av一级| 国产成人精品免费看在线播放| 国产成人一区在线| 日产精品久久久久久久| 亚洲欧美在线播放| 国产精品蜜月aⅴ在线| 强开小嫩苞一区二区三区网站| 成人综合在线视频| 日韩精品成人免费观看视频| 中文字幕精品—区二区| 蜜桃在线一区| 色欲av无码一区二区人妻| 中文字幕av一区二区三区| 成人激情四射网| 欧美一级bbbbb性bbbb喷潮片| 成人综合专区| 国产香蕉精品视频| 欧洲一区在线电影| 少女频道在线观看高清| 久久亚洲午夜电影| 久久爱www久久做| 中文字幕第28页| 一区二区三区动漫| 爱高潮www亚洲精品| 激情视频综合网| 有码一区二区三区| 国产免费视频在线| 99se婷婷在线视频观看| 老司机午夜精品视频在线观看| 欧美激情精品久久久久久免费 | 国产在线视频一区| 亚洲黄色一区| 999福利视频| 精品国产91久久久久久久妲己| 91亚洲精品| 国产特级淫片高清视频| 亚洲色图在线视频| 国产免费永久在线观看| 国产麻豆一区二区三区在线观看| 久久国产精品一区二区|