mysql與redis的區別與使用場景
起因
寫這篇部落格是有一個起因的,來自於我身邊一個朋友面試的經歷。我朋友跟我講她面試的經歷:面試官問她:什麼時候用mysql?什麼時候用redis?我朋友可能對這個問題不是很瞭解,說了句:快取用redis
我當時也就打趣的笑過了,當作一個笑料。
並沒有過多的討論,我以為下來之後她知道了這個問題的答案。但是沒隔一會兒,她找來一張圖,然後給我說:我靠,居然還是對的
應該是別人做的總結,上面有一個紅色的小箭頭,指向了一句話: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,暫時就想到想到這點相同
不同點
- 儲存的位置不同,mysql主要是將資料儲存在物理硬碟上的,redis主要是將資料儲存在記憶體中的。因為這點就會產生許多不同。物理硬碟成本更低,斷電也仍然存在,更加安全可靠,但是基於硬碟的io操作會更加耗時。而redis將資料儲存在記憶體中,斷電就消失,所以相對而言會不安全一些,而且記憶體的成本比硬碟更高,但是基於記憶體的讀寫效率會更高。根據redis官方給出的資料,50個併發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s
- 儲存資料的形式不同,mysql資料是儲存在表中,表中有許多的欄位,每條記錄裡包含多個欄位,每個欄位有不同的含義。而redis儲存資料是以鍵值對的形式,一個鍵對應一個值。
使用場景
mysql和redis不是非此即彼的關係,而是相輔相成的關係,通常而言是mysql主redis輔。那麼在使用是如何選擇呢,其實選擇是基於他們的特點的。因為redis的讀寫效率高、成本高,所以會用在對效能更高的場合,比如秒殺、搶購、實時排行榜等。而mysql可以儲存大量的資料,持久化到硬碟,價效比高,在效能要求不是那麼高的場合都建議採用mysql。使用mysql+redis時,需要對資料做同步。
結束語
回到我們文章開頭的問題:“快取用redis”這句話,其實不太嚴謹的。用於回答“什麼時候用mysql什麼時候用redis”這個問題更是欠妥的。就好像人家問:什麼時候用私家車什麼時候用滴滴?你回答說:叫車用滴滴。滴滴叫車是叫車的一個具體實現,還有其他的叫車,比如美團。redis也是快取的一種具體實現,還有很多別的快取技術,比如: memcache、squid、varnish、web cache、 CDN等等,所以用“redis用於快取”來回答是非常欠妥的,但是如果單獨拿這句話來說,也不算錯。正確的回答是:分析mysql和redis各自的利弊,然後舉例一些具體的使用場景。
相關文章
- Redis - 介紹與使用場景Redis
- Nginx的HTTP模組與Stream模組:區別與應用場景NginxHTTP
- Redis與Memcached的區別Redis
- MySQL的@與@@區別MySql
- list與Set、Map區別及適用場景
- Redis叢集案例與場景分析Redis
- Postgresql與MySQL的區別MySql
- Mysql與mongodb的區別MySqlMongoDB
- mysql與Oracle的區別MySqlOracle
- Redis使用場景Redis
- Redis的配置及與memcached區別Redis
- Socket 與 Http區別 優缺點及應用場景HTTP
- Redis的資料結構與應用場景Redis資料結構
- 【MySQL】now()與sysdate()的區別MySql
- PHPCookie與Session的使用與區別PHPCookieSession
- 聊聊Redis使用場景Redis
- 聊聊 Redis 使用場景Redis
- 關於Redis資料型別以及應用場景的分析與總結Redis資料型別
- Redis最常用的使用場景Redis
- Redis 中 BitMap 的使用場景Redis
- 談談redis,memcache的區別和具體應用場景Redis
- 典型使用者與場景
- 雲審計與大資料審計:區別、優勢與應用場景大資料
- 幽默:MySQL與mongodb區別MySqlMongoDB
- Collections.unmodifiableList方法的使用與場景
- Redis多種資料型別以及使用場景Redis資料型別
- MySQL的create table as 與 like區別MySql
- MySQL語法中=與:=的區別MySql
- Mysql與Oracle的50個區別MySqlOracle
- Memcached與Redis有什麼區別Redis
- Redis都有哪些使用場景Redis
- 關於Ajax和websocket的區別以及使用場景!Web
- synchronized與Lock的區別與使用詳解synchronized
- 【oracle rowid與rownum的使用與區別 】Oracle
- 【轉】mysql 和 redis的區別MySqlRedis
- Redis 資料型別及其使用場景 String 篇Redis資料型別
- redis 五種資料型別和使用場景梳理!Redis資料型別
- 《重學Java高併發》Sempahore的使用場景與常見誤區Java