memcached与redis有什么区别

Redis 和 Memcached 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached相似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操做。那么,Memcached与Redis有什么区别呢?让咱们一块儿来看一下。算法

 

一、数据操做不一样数据库

与Memcached仅支持简单的key-value结构的数据记录不一样,Redis支持的数据类型要丰富得多。Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能。Redis支持服务器端的数据操做相比Memcached来讲,拥有更多的数据结构和并支持更丰富的数据操做,支持list、set、sorted set、hash等众多数据结构,还同时提供了持久化和复制等功能。而一般在Memcached里,使用者须要将数据拿到客户端来进行相似的修改再set回去,这大大增长了网络IO的次数和数据体积。在Redis中,这些复杂的操做一般和通常的GET/SET同样高效。因此,若是须要缓存可以支持更复杂的结构和操做, Redis会是更好的选择。缓存

 

二、内存管理机制不一样服务器

在Redis中,并非全部的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis能够将一些好久没用到的value交换到磁盘。Redis只会缓存全部的key的信息,若是Redis发现内存的使用量超过了某一个阀值,将触发swap的操做,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value须要swap到磁盘。而后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis能够保持超过其机器自己内存大小的数据。网络

 

而Memcached默认使用SlabAllocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以彻底解决内存碎片问题。数据结构

 

从内存利用率来说,使用简单的key-value存储的话,Memcached的内存利用率更高。而若是Redis采用hash结构来作key-value存储,因为其组合式的压缩,其内存利用率会高于Memcached。app

 

三、性能不一样分布式

因为Redis只使用单核,而Memcached可使用多核,因此平均每个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis也在存储大数据的性能上进行了优化,可是比起Memcached,仍是稍有逊色。性能

 

四、集群管理不一样大数据

Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,可是全内存毕竟才是其高性能的本质。做为基于内存的存储系统来讲,机器物理内存的大小就是系统可以容纳的最大数据量。若是须要处理的数据量超过了单台机器的物理内存大小,就须要构建分布式集群来扩展存储能力。

 

Memcached自己并不支持分布式,所以只能在客户端经过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。

 

小结:Redis和Memcached哪一个更好?

Redis更多场景是做为Memcached的替代者来使用,当须要除key-value以外的更多数据类型支持或存储的数据不能被剔除时,使用Redis更合适。若是只作缓存的话,Memcached已经足够应付绝大部分的需求,Redis 的出现只是提供了一个更加好的选择。总的来讲,根据使用者自身的需求去选择才是最合适的。

 

(本文由中间件小哥收集整理)

相关文章
相关标签/搜索