MemCached vs Redis 对象缓存的比较

  MemCached和Redis最主要的应用应该在Web应用开发中,用于Web应用的高并发、高吞吐率的应用开发,这个对于Web应用开发人员是一个福音。但是本人一直就是个C/C++程序猿,在公司项目需求对于高并发后台处理服务器来讲必须进行数据缓存,而内存缓存服务器有MemCached和Redis两个比较重要的解决方案。

  这个也要感谢老郭,老郭的到来让我的思想有了很大的转变,内存服务器、NOSQL数据库的应用知识,本文主要针对MemCached和Redis的应用区别进行分析。

  MemCached和Redis的区别可以从度娘中学习到,没有什么的,主要的区别就是都是作为内存对象缓存服务器,其中MemCached应用比较成熟,而Redis可以实现一定的持久化,这个是MemCached所不存在的。

  当从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。 这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行 批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程 池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。

  如果希望在海量数据的环境中使用好Redis,我相信理解Redis的内存设计和阻塞的情况是不可缺少的。

  Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较,总体来看还是比较客观的,现总结如下:

  1)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
  2)内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
  3)Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。

  

posted @ 2014-07-12 12:47  shelvenn's blog  阅读(1164)  评论(0编辑  收藏