成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Redis:MySQL算老幾?

企業動態 Redis
張大胖把我Redis安排到這個系統中來,那就是為了提升系統的響應速度,我把數據都暫時放到了內存中,每當Tomcat需要的時候直接拿走就是了,都不用聯系MySQL。只有我這里沒有數據的時候Tomcat才會給MySQL說一句:“哥們,把這個SQL執行一下啊,把數據告訴我!”

 前言:上一篇《MySQL:緩存算什么東西?》里挖了一個坑,也有很多人說沒看過癮,今天接著寫,把坑填上,不過得把視角換一下,讓Redis上臺發言。

我知道MySQL看我不順眼,不就是他的好基友Tomcat不怎么搭理他了嗎? 這能怪我? 誰讓他那么慢?

張大胖把我Redis安排到這個系統中來,那就是為了提升系統的響應速度,我把數據都暫時放到了內存中,每當Tomcat需要的時候直接拿走就是了,都不用聯系MySQL。只有我這里沒有數據的時候Tomcat才會給MySQL說一句:“哥們,把這個SQL執行一下啊,把數據告訴我!”

 

MySQL不死心,不斷使壞,總想著把我給干掉,恢復他昔日的榮耀和地位。可歷史的車輪滾滾向前,想逆潮流而動,無異于螳臂擋車啊!

有時候我真想把我緩存中的數據刪除,讓高并發的訪問都壓到他那里去, 累死他! 可一想到自己的職業道德,尤其是張大胖那可憐樣,還是忍了吧。

黑客攻擊?

這一天中午,Tomcat發現流量有些異常,之前大部分的數據我都可以處理,這一次大量的請求在我Redis這里竟然獲取不到數據! Tomcat被迫向MySQL求援:“哥們,這兒有一個SQL啊, 這兒還有一個, 又來一個......”

MySQL剛開始非常高興,滿心歡喜地去執行,可是他很快就發現事情不對, 執行完這些SQL,在數據庫中也查不到數據。他不滿地對Tomcat說:“兄弟,你這是在折騰我嗎? 你看看你這個SQL中where ID = xxxx, 這些ID在數據庫都不存在嘛。”

Tomcat頭也不抬:“又來一個SQL, 還有一個......”

讓我比較佩服的是, MySQL還是比較職業的,盡管有怨氣,他還是不折不扣地執行,很快他就累到了。

整個系統慢如蝸牛,連正常的請求也處理不了。

張大胖趕緊介入,經過一番調查,他發現很多請求故意去查詢那些一定不存在的數據,緩存中肯定沒有,于是請求一定會發到MySQL去執行,在流量大時,MySQL就掛掉了。

換句話說:在黑客的精心算計之下,我這個緩存成了擺設,緩存被穿透了!

 

 


[[248614]]

 

 

張大胖把此事定性為黑客攻擊。

緩存空值

這一次,MySQL終于意識到了我的價值,他出了一個主意:“Redis同學,你把那些不存在的key和對應的空值也緩存下來不就行了?下次訪問,就直接返回一個null給這些黑客,別再來找我了。”

我一聽就知道這是個餿主意:“這些key在你那里都不存在,還讓我緩存,那不就是要浪費我的空間嗎? 張大胖給我分配的空間是有限的啊。”

“你不是可以設定數據的有效期嘛,比如過3分鐘就過期,刪除它,空間不就騰出來了。”

“那在這三分鐘內,如果這個key對應的數據真的被加入到了你MySQL當中,那豈不就不一致了?!” 我問道。

MySQL說道:“如果發生這種情況,就可以想辦法清除掉緩存中的數據,只是程序邏輯就變得復雜了......”

“退一步來說,假設我緩存了他們,那黑客完全可以換一些新的key來攻擊啊!緩存中還是沒有,還得去你那里查,這個辦法不妥!” 我下了結論。

布隆過濾器

MySQL說:“如果能事先得知這個key是不是在數據庫存在就好了,可是想知道是否存在,那就得把所有的key都放到緩存中,Redis,你能受得了嗎?”

我當然受不了。

Tomcat眼前一亮:“你們聽說過布隆過濾器沒有?”

我說:“當然知道了,這是個神奇的數據結構,只需要極少的空間就可以判斷一個元素是不是在一個集合之內,這正好是我們所需要的場景啊:判斷key是否存在。”

(碼農翻身注:布隆過濾器大家可以參考相關資料,這里不再展開。)

Tomcat說:“對,比如我們可以把所有的用戶ID建立一個布隆過濾器,這樣當那些黑客的請求過來以后,先用這個過濾器攔截一下,如果黑客要訪問的用戶ID不在這個過濾器中,我們就直接把他踢出去了。”

MySQL也是經驗豐富:“可是這個Bloom Filter有誤報啊,即使某個用戶ID不在集合中,他也可能報告說在集合中。這個時候Tomcat就認為這是一個合法的用戶ID,就去Redis中查,不存在,然后到我這里查,還是不存在。”

我說:“哎呀,一定的誤報也是允許的,沒有完美的事情,總要付出代價不是?”

大家都表示同意。

數據失效

黑客的攻擊的威脅解除了,日子又恢復了平靜,MySQL意識到了我的價值,也不再嘮嘮叨叨了。

我這個緩存的容量是有限的,不可能無限制地增加,所以張大胖添加到緩存的數據有一個有效期,過了有效期,我就會把他刪除,騰出空間,讓別的數據使用。

如果是普通的緩存數據失效,那就罷了,大不了從數據庫中再去一次就是了。

可是這一次,有個超級熱門的數據失效了,Tomcat組成的集群中有無數的線程都問我要數據,當我告訴他們這個數據已經失效以后,他們扭頭便轉向MySQL,瘋狂地發出SQL語句,問MySQL要數據。

 

 

[[248614]]

 

MySQL傻眼了,這么多的線程,每個要發出的SQL都是相同的,可是又不得不執行。

MySQL又一次累倒了,我想他再次體會到了我的重要性。

他對Tomcat說道:“兄弟,給我發這么多的一模一樣的SQL,你想累死我啊! 你就不能控制一下?只讓一個線程發查詢過來,讓其他的等待一下? 那個線程取到數據以后,其他線程就可以從緩存取了!”

Tomcat覺得很有道理,可是現在系統中有多個Tomcat,每個都是平等的,怎么去選出那個唯一的線程呢?

如果是在同一個JVM中還好辦,輕輕松松用一把進程內的鎖搞定, 可是這分布式的Tomcat,每個都是一個JVM,每個都是一個進程, 怎么搞?

我說:“這很簡單,我Redis這里可以提供一個分布式的鎖,誰獲得了這把鎖,誰就可以訪問數據庫。”[[248614]][[248614]]

 

MySQL佩服地說:“老弟真是不錯,我服了你了,以后你一定要盡可能的把流量都給擋住,別往我這里發了,實在是太可怕了!”

Tomcat補充到:“是啊,這Redis緩存太重要了!”

突然間他注意到了我還只有一臺機器: “你現在怎么還是單臺機器? 一個實例? 萬一掛了怎么辦? 一定得像我一樣,搞集群,提高可用性啊!”

MySQL說:“啊? 這多嚇人,從今天開始,我將時時刻刻為你祈禱,上帝保佑,你千萬別掛掉。”

與此同時,張大胖開始著手Redis集群了......

【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】

 

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2022-05-16 15:23:46

人工智能工具科學計算

2021-06-22 16:38:56

曙光

2024-09-27 13:00:05

智算中心人工智能云計算

2020-04-14 16:29:25

戴爾

2011-07-15 10:26:58

綠色超算藍色基因Q

2020-11-15 19:42:36

人工智能AI

2022-09-02 07:39:15

存算存儲私有云

2016-10-08 15:19:05

百度云百度開放云天算

2017-06-25 21:01:16

超算云計算大數據

2010-08-23 08:26:12

Android超算

2022-05-10 11:40:08

中科曙光

2019-10-18 16:24:01

MySQLRedis數據庫

2023-02-22 17:56:55

MySQL數據存儲

2013-06-19 10:28:19

巴塞羅那超算中心部署
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品欧美一区二区精品久久久 | 国产一区二区在线免费视频 | 欧美阿v | 亚洲国产精品suv | 欧美日韩中文在线 | 欧美一级艳情片免费观看 | 亚洲啊v在线 | 国产精品不卡 | 国产91黄色 | 免费色网址 | 国产精品精品视频 | 久久手机在线视频 | 天天天操操操 | 精品国产三级 | 亚洲永久在线 | 大香在线伊779 | 亚洲影音 | 免费在线观看黄网站 | 欧美中文一区 | 精品在线一区二区三区 | 一区二区手机在线 | 精品美女视频在免费观看 | 精品国产欧美一区二区三区成人 | 日韩淫片免费看 | 日本三级网址 | 中文字幕精品一区二区三区精品 | 无码日韩精品一区二区免费 | 91精品国模一区二区三区 | 日本成人在线免费视频 | 色欧美综合 | 欧美1区2区 | 亚洲成人免费视频 | 久久草视频 | 天堂一区 | 嫩草视频在线免费观看 | 天堂在线免费视频 | 一区在线视频 | 日韩一区二区三区在线 | 日本一区二区三区在线观看 | 日韩欧美亚洲 | 亚洲综合在线视频 |