1. 程式人生 > >redis和MySQL區別(轉載)

redis和MySQL區別(轉載)

redis是一個記憶體資料結構的服務,它將資料儲存在記憶體中,從而實現了非常好的吞吐量和效能。它有提供了很豐富的資料結構,特別適合社交類業務的系統。但是記憶體資料庫要求伺服器的記憶體足夠才行,儲存的資料量越大消耗的記憶體也就越大,如果記憶體不夠就會導致作業系統進行記憶體到磁碟的交換結構效能急劇下降。新浪微博的資料儲存就是用的redis來實現的。

mysql是一個傳統的資料庫系統,因為它的架構非常的靈活,可以整合很多不同方式的儲存。mysql因為大部分都是磁碟操作自然效能比不上redis,但是支援事務等功能。適合於各種業務系統,對於海量的資料儲存並沒有問題。Facebook用的是MySQL的叢集。

資料量有多大,業務是什麼樣,不能一概而論。用的好一樣可以解決大部分的問題,新浪微博的冷資料就是用MySQL。

大體而言,Redis 最適合處理的是小而熱,而且是寫頻繁,或者讀寫都比較頻繁的熱資料。對於大而熱的資料,如果其它方式很難解決問題,也可以考慮使用 Redis 解決,但是一定要非常謹慎,防止資料無限膨脹。原因如下:

首先,對於冷資料,無論大小,都不建議放在 Redis 中。Redis 資料要全部放在記憶體中,資源寶貴,把冷資料放在其中實在是一種浪費,冷資料放在普通的儲存比如關係資料庫中就好了。

其次,對於熱資料,尤其是寫頻繁的熱資料,如果量比較小,是最適合放到 Redis 中的。比如上面提到的網站總的註冊使用者數,就是典型的 Redis 用做計數器的例子。再比如論壇最新發表列表,最新報名列表,可以控制數量在幾百到一千的規模,也是典型的 redis 做最新列表的使用方式。

另外,對於量比較大的熱資料(或者冷熱不均資料),使用 Redis 時一定要比較謹慎。這種型別資料很容易引起資料膨脹,導致 Redis 消耗記憶體巨大,讓系統難以承受。薄荷的一個慘痛教訓是把使用者關注(以及被關注)資料放在 Redis 中,這是一種資料量極大,冷熱很不均衡的資料,在幾百萬的使用者級別就佔用了近 10 GB左右記憶體,讓 Redis 變得難以應付。應對這種型別的資料,可以用普通儲存 + 快取的方式。

如果用對了地方,比如在小而熱的資料情形,Redis 表現很棒,如果用錯了地方,Redis 也會帶來昂貴的代價,所以使用時務必謹慎。