Redis和Memcache,我究竟应该应该选择哪一个做缓存?

 

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了。

—————————————————

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值