看到不少人推薦使用Redis代替Memcached,我以爲這兩個是不同的東西,它們的關係應該是共存而不是替代。 數據庫
Memcached是個純內存型的緩存系統,支持數據類型單一,單個緩存數據有限制,支持分佈式,我以爲這是個很理想的緩存系統。 緩存
Redis是個簡單的NOSQL數據庫,支持幾種簡單的數據類型,支持主從複製,支持持久化,能夠看做是個內存型數據庫。 服務器
因而可知,Memcached是正宗的緩存系統,Redis是個能夠作緩存系統的內存型數據庫。 分佈式
因爲Redis的數據能夠設置過時時間,支持多種數據類型,數據大小無限制,支持持久化等特色,貌似怎麼看都穩壓Memcached一籌,替代它好像是大勢所趨。 性能
事實並不是如此。 網站
網站須要緩存的數據能夠分爲兩種,一種是可丟失性的緩存,這種緩存不在意被丟失,丟失了就再從數據庫或其它地方再讀回來,如Session,從數據庫查詢的數據,應用代碼的緩存等;另外一種是不可丟失性的緩存,就是其它地方沒保存有,只有Redis緩存有的數據。 內存
先說下Memcached和Redis的優缺點: 資源
Memcached是純內存型的緩存,佔用內存小,運行穩定,讀寫數據很快。Redis的數據能夠持久化到硬盤,佔用內存大,佔用硬盤IO高,在寫頻繁的時候而硬盤性能又不高的時候(目前只有SSD固態硬盤的性能才高,機械硬盤性能都不高),大大佔用CPU資源,讀寫性能會急劇下降,甚至會崩潰,不穩定。 get
爲何說Memcached能夠緩存Session數據?有的人說,Memcached崩潰會形成Session丟失,我以爲這個可能性真的不大。Session是每一個頁面都須要讀,每一個新用戶都須要寫的,並且大部分的Session數據都是可丟失性的數據(通常網站陌生人Session比登陸用戶Session要多的多),數據量也很小,很是適合保存在Memcached。 io
Memcached實際上是很是穩定的,目前咱們網站天天百萬PV,沒出現過Memcached崩潰的問題。只要服務器不崩潰,不是人爲關閉,Memcached幾乎沒有崩潰的可能。若是服務器常常崩潰的話,我以爲應該考慮換個好點的服務器而不是把Memcached換成Redis。
固然了,Redis也有其適用的場合,我會在下一篇博文中,詳細介紹個人網站使用Redis保存哪些不可丟失性數據。