日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL:缓存算什么东西?!

發布時間:2025/3/21 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL:缓存算什么东西?! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

十年前,我們還是一個企業內部的應用,用戶不多,數據也不多。

Tomcat一天也處理不了多少請求,閑得無聊的時候只能和我聊天,這是沒有辦法的事情,因為整個系統只有我們兩個:

沒錯,我就是大名鼎鼎的MySQL ,我和Tomcat位于不同的機器上,每次通信都是一次網絡的請求。

這樣的情況持續了三年,我們倆把話都快要說盡了的時候,人類終于送來了一個新家伙:緩存。

從外表看來,這個緩存就是一個Map而已, 保存的都是一些(key,value)這樣的東西。

從內部看,他還真是個Map,是那個叫做張大胖的人類寫的、一個線程安全的、可以設定過期時間的Map。

Tomcat和我都有點瞧不上他,覺得他實在是簡陋,甚至難以成為一個獨立的組件。

更讓Tomcat不爽的是,這個簡陋的家伙竟然和自己一起,共享JVM進程。

慢慢地事情發生了變化,張大胖改變了程序邏輯:在之前,用戶的請求發到Tomcat這里,如果需要訪問數據庫的數據, Tomcat直接就把SQL語句扔給我來執行。

現在, 先要到那個Map,不,是緩存中查一下,看看有沒有相關數據,如果有,直接就返回了,根本不用和我打交道; 如果緩存中沒有,那才發出SQL查詢,并且把緩存也給填充上,這樣下次就不用訪問數據庫了。

Tomcat整天和緩存打交道,聊得熱火朝天。 我觀察了幾天,終于明白這小子把我這個好基友給拋棄了。

Tomcat得意地對我說: “這緩存和我在一個進程中,訪問起來速度快得很,立刻就能返回數據,哪里像你MySQL,慢慢悠悠地執行半天?! ”

說完他又做了一個總結:進程內調用就是好啊。

其實吧,緩存這小子的本質我比誰都清楚,我內部就有緩存啊,就是為了避免頻繁地訪問硬盤, 大家利用的都是程序的局部性原理嘛,有什么神秘的?!

我耐心蟄伏,等待機會,準備一舉把這個不知好歹的Map干掉。

?

從進程內到進程外

過了幾個月,張大胖把系統的架構做了升級,為了應對高并發的訪問,他用一個nginx來搞負載均衡,分發用戶的請求,在后面搞了很多Tomcat和很多進程內的緩存,我們的系統變成了這個樣子:

?

我一看就意識到我的機會來了:這緩存之間很容易出現不一致啊。

比如: 用戶的請求在JVM 1 中進行處理,MySQL做了更新,JVM 1中相關的緩存也做了更新或者被刪除, 可是JVM 2和JVM 3中緩存的數據還是舊的啊。

不出我的所料,數據不一致的問題非常嚴重,用戶頻繁抱怨,緩存這小子這下要完蛋了!

可是緩存還想垂死掙扎,他說:”可以這樣嘛,如果一個JVM中的緩存發生了變化,就通知其他JVM。”

可是通知總會有延遲,如果JVM 1還沒來得及通知JVM 2和JVM 3, 而用戶的請求已經在這兩臺機器上開始處理了,數據不一致還是存在。

特別是各個JVM之間需要來回交互,緩存的更新需要你通知我,我通知你,麻煩得要死。

Tomcat出了一個餿主意:“別讓緩存互相更新,讓緩存定時從MySQL那里更新!”

可是既然是定時更新,那緩存中的數據和我這里在某些時間段內還是會出現不一致。

除非數據的變化頻率極低,否則這幾乎是個無解的問題。

終于,張大胖如我所愿, 把進程內緩存給刪除了!

我正打算好好跟Tomcat敘敘舊(這么多Tomcat啊!), 可是第二天他便弄來了一個新的家伙:Redis,還是緩存!

和之間那簡陋的Map相比,Redis可是強大得太多太多了,這個緩存獨自霸占了一臺機器,讓幾個Tomcat都可以共享訪問。

換句話說,緩存從進程內搬到了進程外!

?

?

?

?

我對Redis說:“你小子也需要網絡才能訪問了,和我差不多,有存在的必要嗎?”

Redis說:“當然有了,雖然都是網絡訪問,但是我這里所有的數據可都在內存中啊,訪問起來還是比你快。”

我承認,他說的是對的。

?

數據不一致

這天晚上,訪問量突然間特別的大,是平時的百倍,不,千倍。 據Redis說,這是張大胖那家伙在搞壓力測試了。

壓力測試過后,一地雞毛。 一盤點就發現,Redis的數據和我的數據居然發現了不一致。

Redis傻眼了,這是怎么回事?數據不一致,人類肯定以我MySQL的數據庫數據為準啊。

Tomcat提示Redis:“估計是高并發惹的禍,我們看看是怎么更新數據的。”

Redis說:“簡單啊,先更新MySQL,然后更新我的數據。”

Tomcat說:“這是兩步操作,如果有兩個線程都在這么干,就出問題了! 比如MySQL的有個值是100,現在線程1想把它改成200, 線程2想把它改成300。”

Redis說:“看來這里有個大漏洞啊,那怎么辦?”

看著他們倆一籌莫展的樣子,我忍不住說道:“這還不簡單,當需要更新數據的時候,不要去更新緩存,把緩存中相關數據刪除就行了。”

?

?

Redis說:“你這是官報私仇吧,把數據從我這里刪除了,下次用戶訪問的時候沒有,還得找你去要,對不對?”

我說:“是得找我要,但是能解決你的問題啊,兩個線程同時寫,不會出現數據庫和緩存不一致啊。“

再說了,這其實不是我們能管的事情,咱們走著瞧,看看張大胖怎么做。”

第二天,張大胖果然按照我說的邏輯修改了程序,還美名其曰:Cache Aside Pattern。

雖然我一直想把緩存干掉,可是,幾天后的經歷卻深刻地教育了我,緩存還是必不可少的......

(唉,再挖個坑,主題估計你也想到了,就是緩存穿透,擊穿,雪崩......)

總結

以上是生活随笔為你收集整理的MySQL:缓存算什么东西?!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费网站www在线观看 | 日本午夜精品 | 日韩城人免费 | 亚洲精品欧美精品 | 你懂的视频在线播放 | 美女超碰在线 | 国内精品久久久久久久久久久 | 成人午夜激情视频 | 熟女毛毛多熟妇人妻aⅴ在线毛片 | 高清日韩一区二区 | 奇米影视亚洲春色 | 日韩伊人网 | 欧美成人a交片免费看 | 国产第一页在线观看 | 丁香花电影在线观看免费高清 | 免费看黄色的视频 | 亚洲欧美一区二区三 | 92久久精品一区二区 | 中文一区视频 | 国产91丝袜在线18 | 国产精品另类 | 波多野结衣av一区二区全免费观看 | 国产永久免费视频 | 黄色网久久 | 欧美91在线| 中文字幕乱码人妻无码久久 | 18禁免费观看网站 | 咪咪色在线视频 | 玖玖爱这里只有精品 | 狠狠狠狠狠 | 99精品久久精品一区二区 | 国产精品成人aaaaa网站 | 欧美大片一级 | 91精品国产综合久久久久 | 小俊大肉大捧一进一出好爽 | 日韩伦理中文字幕 | 国产极品探花 | 人人插人人射 | 久久精品一日日躁夜夜躁 | www.色哟哟 | 中文字幕无码毛片免费看 | 成人第一页 | 国产日韩免费 | 色爽爽一区二区三区 | 日本不卡一二 | 91色爱 | 国产精品色网 | 91精产国品一二三区在线观看 | 6080毛片 | 久久55 | 久久精品免费av | 人人爽人人做 | 日韩理论视频 | 伊人久久网站 | 一区二区有码 | 综合xx网 | 韩国女主播裸体摇奶 | 亚洲一级Av无码毛片久久精品 | 精品国产中文字幕 | www.777奇米 | 黄色av网址在线观看 | 91操人 | 另类亚洲色图 | 亚洲国产一区二区三区a毛片 | 国产精品久久久久久 | 男女午夜影院 | 天天操天天干天天干 | 午夜视频福利网站 | 国产精品精| 贵族女沦为官妓h呻吟 | 久久久精品 | 在线观看www视频 | 波多野结衣中文字幕在线 | 日本丰满大乳奶做爰 | 樱花草涩涩www在线播放 | 国产精品xxx视频 | 婷婷色图 | 日本xxxx高清 | 天天射日日| 国产丝袜精品视频 | 蜜臀视频在线观看 | 中文字幕一二三四区 | 欧美一区二区免费在线观看 | 婷婷欧美| 久久无毛 | 国产三区精品 | 精品中文字幕一区二区 | 波多野结衣乳巨码无在线 | 日本一区视频在线观看 | 日本一本在线 | 久热精品在线 | 欧美日韩亚洲国产综合 | 精品日本一区二区三区在线观看 | 成人免费av在线 | 人妻少妇精品中文字幕av蜜桃 | 成人免费av在线 | 亚洲精品影院 | 怨女1988国语版在线观看高清 | 天天看天天摸 |