KV上MySQL與Redis的PK

xuexiaogang發表於2021-12-11

自己原文公眾號: https://mp.weixin.qq.com/s/UfgCoVfe21q7bYiu2XtG3Q

首先我要說一下redis真的很強,使用也廣泛,而且使用簡單,在資料庫兵器譜排行中KV領域的第一。

      不過在我接觸過程中發現不少系統對redis依賴很強,甚至達到了沒redis日子過不下去的程度。我不由得想那沒有redis之前我們的系統就活不下去了嗎?不見得。就像沒有hadoop之前該怎麼幹活就怎麼幹活,四大行和三大運營商該出報表出報表。沒聽說這兩個公司無法決策。(有時候技術被濫用了也是一種悲哀)

       言歸正傳,比如微博以前用redis快取,其實不管什麼系統用redis快取我覺得都沒錯。但是不能說沒有redis就停止服務,假設redis被擊穿,或者發生問題。我們還是要繼續走下去的,只是走的很慢。也就是說外圍部隊擋不住了,我就是打巷戰也要堅持,不能說redis一完蛋就全體投降了。redis是資料庫,記憶體資料庫。後面還有Oracle、MySQL、PostgreSQL這些資料庫,而且這些資料庫都不是白給的。所不同的是redis的不需要SQL解析,而關係型資料庫需要解析的。但是對於Oracle這種軟軟解析的來說,其實問題也不大。

    redis是單執行緒的,我們不能說全指望一個執行緒不出現問題,甚至不允許出現慢。如果能做到這個,那麼我想在關係型資料庫層面也能做得到。其實關係型資料庫不管是Oracle的多程式還是MySQL這樣的多執行緒都不是吃素的。我以前有三篇模擬。


https://mp.weixin.qq.com/s?__biz=Mzk0NDIxNDg5Mg==&mid=2247483843&idx=1&sn=a185aa932124c2987e34a4d78e3c3d40&chksm=c32947c0f45eced67261c7e0367830ed219a9401ef58d06bd198818879490e5da924d1971a27&token=1191007506&lang=zh_CN#rd


https://mp.weixin.qq.com/s?__biz=Mzk0NDIxNDg5Mg==&mid=2247483850&idx=1&sn=122bade9a68be1d05bfef95a2eeef4d7&chksm=c32947c9f45ecedf9ae7ac7201e5e801aff3f85b7618951177f15cc23d07b73c5d8d49788492&token=1191007506&lang=zh_CN#rd


https://mp.weixin.qq.com/s?__biz=Mzk0NDIxNDg5Mg==&mid=2247483855&idx=1&sn=8bdc3c4f09d2641451255dab2a45f42e&chksm=c32947ccf45eceda753997203e757f2a443cb6c5df0da7646b00c6f86251b7e0b902d25fa7b1&token=1191007506&lang=zh_CN#rd


最近安排了新人做幾個壓測。剛工作沒多久的孩子做事還不錯的。

redis 壓測不同key 長度下10w key qps


這裡正好說明越大越慢。本來redis的規範也是要禁止大key。可以看出一般每秒4萬的QPS是很正常的。在網上也是可以的需要cluster模式,以及阿里雲企業版什麼的了。社群版這個資料說的過去。


後面的結果是這樣的


談好了redis看看mysql的。(oracle和PG同理)

  

      剛開始她用了2個C的mysql效果不太好


我讓她加到8個C,就是下面這樣子。充分發揮資料庫的優勢。(注意這個MySQL是預設引數,沒做任何最佳化)



   可以看出每秒也有6w。單機MySQL,無最佳化,虛擬機器,8C。10萬記錄級別下,用主鍵查詢。類似redis的KV。至少說不輸吧,略勝。如果CPU很多,再最佳化的話,那麼就拉開差距了。更不要說mysql還有memcahce的外掛,可以不用解析SQL了。

    而PG和Oracle的多程式能力就更加強了,所以說redis很強,但是其他資料庫也不弱,完全可以承擔壓力。redis的定位是輔助快取,而不是核心唯一。後面有更強大的資料庫抗壓,之所以讓快取分離出去是讓資料庫更加關注業務交易,減輕點負擔。不過如果本身沒有壓力,自己來抗也不是不行。因為沒有壓力說明也不需要快取。

      我們想想畢竟沒有哪個股票交易的核心交易買賣是redis吧?

      其實單機的redis都已經滿足我們日常的快取要求,至於其他的功能訊息佇列等等,還是交給訊息佇列去做吧。至於鎖,其實還是關係型資料庫更加擅長,到了資料庫還是會有鎖檢測的。(redis是支援分散式鎖的,oracle也支援sharding。但是支援不見得一定要用,支援的好和支援還是有點區別的。現在的車有輔助駕駛或者自動駕駛,但是還是少用)別讓redis的一個執行緒總是處理各式各樣的事件。總被打擾效率也受影響。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2847131/,如需轉載,請註明出處,否則將追究法律責任。

相關文章