共计 2144 个字符,预计需要花费 6 分钟才能阅读完成。
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.