mysql與redis的區別與使用場景

阿亮_1024發表於2020-12-23

起因

寫這篇部落格是有一個起因的,來自於我身邊一個朋友面試的經歷。我朋友跟我講她面試的經歷:面試官問她:什麼時候用mysql?什麼時候用redis?我朋友可能對這個問題不是很瞭解,說了句:快取用redis

在這裡插入圖片描述
我當時也就打趣的笑過了,當作一個笑料。
聊天記錄1
並沒有過多的討論,我以為下來之後她知道了這個問題的答案。但是沒隔一會兒,她找來一張圖,然後給我說:我靠,居然還是對的
聊天記錄2
應該是別人做的總結,上面有一個紅色的小箭頭,指向了一句話:redis用於快取。這、、、、、

有些話正著說是對的,反過來說就不對了,“redis用於快取”這句話沒毛病,但是“快取用redis”這句話就有點欠妥了。因為快取是一種抽象的概念,而redis是實現快取的其中一種技術,還有別的實現快取的技術,快取是一個範圍更大的概念。快取之於redis就像動物之於猴子,說猴子是動物可以,但是說動物是猴子就不對了。後面介紹了mysql和redis之後再說具體的說一下這個問題。

正文

mysql與redis都屬於資料庫,用於儲存資料的,我們平時在網上衝浪,那麼多資訊供我們瀏覽,這些資訊就是用資料庫進行儲存的。資料庫經過幾十年的發展,形式已經多種多樣,就目前而言,主流的型別有兩種,關係型資料庫和非關係型資料庫,而mysql和redis就是這兩種資料庫的典型代表。

各自介紹

分別介紹mysql和redis,當然,我自己用語肯定不太準確,所以我摘抄了維基百科的描述。

mysql

MySQL(官方發音為/maɪ ˌɛskjuːˈɛl/“My S-Q-L”[5],但也經常被錯誤讀作/maɪ ˈsiːkwəl/“My Sequel”)原本是一個開放原始碼的關聯式資料庫管理系統,原開發者為瑞典的MySQL AB公司,該公司於2008年被昇陽微系統(Sun Microsystems)收購。2009年,甲骨文公司(Oracle)收購昇陽微系統公司,MySQL成為Oracle旗下產品。

MySQL在過去由於效能高、成本低、可靠性好,已經成為最流行的開源資料庫,因此被廣泛地應用在Internet上的中小型網站中。隨著MySQL的不斷成熟,它也逐漸用於更多大規模網站和應用,比如中文維基百科、Google和Facebook等網站。非常流行的開源軟體組合LAMP中的“M”指的就是MySQL。

但被甲骨文公司收購後,Oracle大幅調漲MySQL商業版的售價,且甲骨文公司不再支援另一個自由軟體專案OpenSolaris的發展,因此導致自由軟體社群們對於Oracle是否還會持續支援MySQL社群版(MySQL之中唯一的免費版本)有所隱憂,MySQL的創始人麥克爾·維德紐斯以MySQL為基礎,成立分支計劃MariaDB。而原先一些使用MySQL的開源軟體逐漸轉向MariaDB或其它的資料庫。例如中文維基百科已於2013年正式宣佈將從MySQL遷移到MariaDB資料庫[6]。

以上內容摘抄自維基百科,更多內容可點選: MySQL維基百科描述 檢視

redis

Redis是一個使用ANSI C編寫的開源、支援網路、基於記憶體、分散式、可選永續性的鍵值對儲存資料庫。從2015年6月開始,Redis的開發由Redis Labs贊助,而2013年5月至2015年6月期間,其開發由Pivotal贊助。在2013年5月之前,其開發由VMware贊助。根據月度排行網站DB-Engines.com的資料,Redis是最流行的鍵值對儲存資料庫。

以上內容摘抄自維基百科,更多內容可點選: MySQL維基百科描述 檢視

相同點

都同為資料庫,所以相同點是都是用於儲存資料的,emm,暫時就想到想到這點相同

不同點

  1. 儲存的位置不同,mysql主要是將資料儲存在物理硬碟上的,redis主要是將資料儲存在記憶體中的。因為這點就會產生許多不同。物理硬碟成本更低,斷電也仍然存在,更加安全可靠,但是基於硬碟的io操作會更加耗時。而redis將資料儲存在記憶體中,斷電就消失,所以相對而言會不安全一些,而且記憶體的成本比硬碟更高,但是基於記憶體的讀寫效率會更高。根據redis官方給出的資料,50個併發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s
  2. 儲存資料的形式不同,mysql資料是儲存在表中,表中有許多的欄位,每條記錄裡包含多個欄位,每個欄位有不同的含義。而redis儲存資料是以鍵值對的形式,一個鍵對應一個值。

使用場景

mysql和redis不是非此即彼的關係,而是相輔相成的關係,通常而言是mysql主redis輔。那麼在使用是如何選擇呢,其實選擇是基於他們的特點的。因為redis的讀寫效率高、成本高,所以會用在對效能更高的場合,比如秒殺、搶購、實時排行榜等。而mysql可以儲存大量的資料,持久化到硬碟,價效比高,在效能要求不是那麼高的場合都建議採用mysql。使用mysql+redis時,需要對資料做同步。

結束語

回到我們文章開頭的問題:“快取用redis”這句話,其實不太嚴謹的。用於回答“什麼時候用mysql什麼時候用redis”這個問題更是欠妥的。就好像人家問:什麼時候用私家車什麼時候用滴滴?你回答說:叫車用滴滴。滴滴叫車是叫車的一個具體實現,還有其他的叫車,比如美團。redis也是快取的一種具體實現,還有很多別的快取技術,比如: memcache、squid、varnish、web cache、 CDN等等,所以用“redis用於快取”來回答是非常欠妥的,但是如果單獨拿這句話來說,也不算錯。正確的回答是:分析mysql和redis各自的利弊,然後舉例一些具體的使用場景。

相關文章