了解Redis 和 Memcached 的区别


具体有以下几点:

  1. 数据类型支持不同

与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用得数据类型主要有 五种:String(字符串), Hash(哈希), List(列表), Set(集合)Sorted Set(有序集合). Redis内部使用一个redisObject对象来表示所有得key和value;

  1. 内存的管理机制不同

在redis中,并不是所有的数据一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘中。Redis直会缓存所有的key的信息,如果Redis发现内存中的使用超过某一阈值,。将出发swap的操作。Redis计算出哪些key对应的value需要swap到磁盘,然后再将这些key对应的value持久化到磁盘中,同时再内存中清除。

  1. 数据持久化支持

Redis虽然时基于内存的存储系统,当时他本身是支持数据持久化的,而且提供了两种主要的持久化策略:

  1. RDB快照
  2. AOF日志。
    而Memcached是不支持数据持久化操作的
  1. 集群管理的不同

Memcached是全内存的数据缓冲系统,Redis虽然支持数据持久化,但是全内存毕竟才是其提高性能的根本。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存的大小。就需要构建分布式集群来扩展存储能力。

总结

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