Redis和Memcached各有什麼優缺點?主要的應用場景是什麼?

恍惚面對世界


根據我的經驗,在BAT裡,redis已經逐漸取代了memcached,成為分佈式場景廣泛使用的緩存方案。接下來,我們就分析下,redis是如何取代memcached,成為開發者的寵兒的。

支持的存儲類型不同

雖然都是內存數據庫,memcached不僅能夠存儲string,還能夠存儲圖片,視頻等形式的文件。然而對於更多的使用內存數據庫做緩存以及分佈式方案的程序開發者來說,memcached提供的string格式存儲,應用場景有限,而存儲圖片視頻的功能又十分雞肋(主要是沒這方面需求)。相比之下,redis提供set,hash,list等多種類型的存儲結構,對於做分佈式緩存實在是再適合不過了。

數據落盤

雖然大多數人使用緩存以及分佈式方案都不會要求數據持久化,但是誰也不能保證不出現萬一的情況。一旦發生穩定性問題,memcached掛掉後,數據是不可恢復的,而redis除了支持在配置裡打開數據落盤(RDB),還能通過aof來找回數據。

內存空間與數據量

memcached可以修改最大內存,使用的是LRU算法,而redis目前底層使用了自己的VM,引入了新的特性突破了物理內存的限制。個人認為在這方面依然是redis更加優秀一些。

使用場景

基於以上提到的特點,基本我們就能分清redis與memcached的場景了。

如果對緩存數據類型超越了基本的數據結構,需要圖片或者視頻,多讀少寫,且數據量非常大的場景,那麼一定要用memcached而不是redis了(比如微博大量查詢好友信息,微博信息等,但是不是說微博用的是memcached方案哦)。

但是如果是對緩存的數據格式有更多的要求,且對安全性也有很高的要求的話,建議還是使用redis,這也是redis目前正在逐漸代替memcached的根本原因。

以上是我的淺見,歡迎各位在下方評論區與我溝通。

我是蘇蘇思量,來自BAT的Java開發工程師,每天分享科技類見聞,歡迎關注我,與我共同進步。


一個存在感小透明


redis和memcache都是key-value型的緩存數據庫,如果只是用到快速緩存,將數據保存在內存中快速調用,那麼兩者性能上差不多。如果要有消息隊列的需求,那麼redis更適合。redis可以當成memcache的2.0


分享到:


相關文章: