Memcache为老牌的内存缓存技术,对相关领域支持比较丰富。但是由于其数据结构类型较为单一,主要为K-V存储。但是在移动互联网时代,应用场景越来越丰富,已逐渐满足不了相关需求。Redis应景而生,为了应对互联网业务复杂的应用场景,除了K-V的string类型外,逐步支持了set、list、hash、zset、pubsub、bitmaps、GEO、HyperLogLog、stream等多种应用场景。
下面系统做下比较:
一、性能
两者都是基于内存存储,性能上都很出色,具体对比:由于Redis单线程架构,只能使用CPU单核,而Memcached可以使用多核,在100k以上的数据中,Memcached性能要明显高于Redis,虽然Redis最近也在存储性能上进行优化,比如6.0版本开始支持多线程,但主要是对网络IO的优化,比起 Memcached,还是稍有逊色。
二、内存空间和数据量大小
Memcache可以配置控制每个Value的最大容量,Redis则没有相关。这个对于缓存类型的数据库,有个限制是非常方便的,希望Redis以后可以支持。
三、操作便利性
MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数。
四、可靠性
MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
五、主从复制
Redis源生支持命令级别的主从复制,扩展性强,而Memcache源生则不支持,需要第三那方工具配合。
六、分布式集群
Memcached的分布式不是在服务器端实现的,而是在客户端应用中实现的,即通过内置算法制定目标数据的节点,如下图所示:
相较于Memcached只能采用客户端实现分布式存储,Redis则在服务器端构建分布式存储。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,各个节点地位一致,具有线性可伸缩的功能。如下图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个 key的数值域分成16384个哈希槽,而且可以在多个分批间进行自由迁移配置。
给出一个Redis与Memcache对比:
总结:
随着Redis版本的迭代,相比于Memcache不管是性能、稳定性已经没有特别明显的短板,随着6.0 版本的推出和线上应用,个人认为已经完全可以替代Memcache了。
—————————————————