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


分享到:


相關文章: