Redis 和 Memcached 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached相似,Redis将大部分数据存储在内存中,反对的数据类型包含:字符串、哈希表、链表、汇合、有序汇合以及基于这些数据类型的相干操作。那么,Memcached与Redis有什么区别呢?

1、数据操作不同

与Memcached仅反对简略的key-value构造的数据记录不同,Redis反对的数据类型要丰盛得多。Memcached根本只反对简略的key-value存储,不反对枚举,不反对长久化和复制等性能。Redis反对服务器端的数据操作相比Memcached来说,领有更多的数据结构和并反对更丰盛的数据操作,反对list、set、sorted set、hash等泛滥数据结构,还同时提供了长久化和复制等性能。而通常在Memcached里,使用者须要将数据拿到客户端来进行相似的批改再set回去,这大大增加了网络IO的次数和数据体积。在Redis中,这些简单的操作通常和个别的GET/SET一样高效。所以,如果须要缓存可能反对更简单的构造和操作, Redis会是更好的抉择。

2、内存管理机制不同

在Redis中,并不是所有的数据都始终存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis能够将一些很久没用到的value替换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis依据“swappability = age*log(size_in_memory)”计算出哪些key对应的value须要swap到磁盘。而后再将这些key对应的value长久化到磁盘中,同时在内存中革除。这种个性使得Redis能够放弃超过其机器自身内存大小的数据。

而Memcached默认应用Slab Allocation机制治理内存,其次要思维是依照预先规定的大小,将调配的内存宰割成特定长度的块以存储相应长度的key-value数据记录,以齐全解决内存碎片问题。

从内存利用率来讲,应用简略的key-value存储的话,Memcached的内存利用率更高。而如果Redis采纳hash构造来做key-value存储,因为其组合式的压缩,其内存利用率会高于Memcached。

3、性能不同

因为Redis只应用单核,而Memcached能够应用多核,所以均匀每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,尽管Redis也在存储大数据的性能上进行了优化,然而比起Memcached,还是稍有逊色。

4、集群治理不同

Memcached是全内存的数据缓冲零碎,Redis尽管反对数据的长久化,然而全内存毕竟才是其高性能的实质。作为基于内存的存储系统来说,机器物理内存的大小就是零碎可能包容的最大数据量。如果须要解决的数据量超过了单台机器的物理内存大小,就须要构建分布式集群来扩大存储能力。

Memcached自身并不反对分布式,因而只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。相较于Memcached只能采纳客户端实现分布式存储,Redis更偏差于在服务器端构建分布式存储。

小结:Redis和Memcached哪个更好?

Redis更多场景是作为Memcached的替代者来应用,当须要除key-value之外的更多数据类型反对或存储的数据不能被剔除时,应用Redis更适合。如果只做缓存的话,Memcached曾经足够应酬绝大部分的需要,Redis 的呈现只是提供了一个更加好的抉择。总的来说,依据使用者本身的需要去抉择才是最合适的。

It’s not uncommon to hear Redis compared to memcached, which is a very high-
performance, key-value cache server. Like memcached, Redis can also store a mapping
of keys to values and can even achieve similar performance levels as memcached. But the similarities end quickly—Redis supports the writing of its data to disk automatically
in two different ways, and can store data in four structures in addition to plain string keys
as memcached does. These and other differences allow Redis to solve a wider range of
problems, and allow Redis to be used either as a primary database or as an auxiliary data-
base with other storage systems.