文档章节

Memcache与Redis比较

chris_2009
 chris_2009
发布于 2016/04/15 15:36
字数 1000
阅读 100
收藏 9
点赞 1
评论 0

下文中,memcached简称M,redis简称R。

定位

M最初的定位是内存缓存的扩展,可以合理分配使用多台服务器的未使用内存。

R的定位是结构数据存储服务器,在内存中存储数据是增加性能的一种方式,所以它支持数据持久化以及不活跃数据落到磁盘。
R同时支持Pub/Sub模式的消息队列服务

数据类型支持

M使用key-value的方式存储数据,对于集合类型没有很好的支持。

R支持strings、hashes、lists、sets、sorted sets,可以更方便的适应业务场景,但是集合类型会带来额外的性能开销。

数据存储

M是全内存的方式存储数据。

R是内存优先,其中key是全部存放在内存中的,value部分存储在内存中,部分存储在磁盘中(非活跃数据)。R有两种方式将数据存储到磁盘,一种是以内存快照的方式存储(adb.c),一种是以顺序命令的方式(aof.c)。

内存管理

M使用固定长度的方式分配内存。首先选择合适大小的Slab Class(不同的固定大小,根据数据的大小选择),然后将数据存储到Slab Class下的Chunk(固定大小)中。Chunk使用空闲列表的方式管理。

R将每个数据块的大小存储在数据块的头部,通过一个数组(zmalloc_allocations)来管理数据块,参见zmalloc.c。
R推荐使用hashes,它有更好的存储和检索效率。相对于M来说,R的方式可能会产生少量的内存碎片,同时R会存在数据从内存swap到磁盘的情况。

集群

M本身并不支持集群,一般是用一致性hash的方式将不同区段的数据存储在不同的服务器上面,因此存在单点故障和集群容量伸缩的问题。
M集群的问题可以通过缓存代理服务器规避,后端的M各自独立,代理服务器负责之间的数据同步及可用性检测。

R的cluster支持分布式存储的方式,同时支持Master-Slave应对单独故障。R的节点之间通过命令记录的方式执行同步。

数据一致性

M使用cas命令保证数据一致性。

R使用事务(Pipelining、Scripting方式)保证一组操作的原子性。

IO

M使用多线程模型,非阻塞IO复用(使用epoll或者kqueue,也可以用poll or select但是不推荐),网络IO处理使用了libevent。多线程可以发挥多核的优势,但是会带来并发读写的问题,M使用了锁来处理缓存一致性的问题,这会带来额外的性能开销。

R使用单线程模型,非阻塞IO复用,使用了一个简单事件驱动库ae(ae.c),支持epoll、kqueue和select。单线程方式有更好的性能,但是聚合计算等操作会造成阻塞。数据的持久化使用了额外的线程。

性能

  • M在数据长度比较大时性能优于R(多线程IO)
  • R在数据超出内存大小且冷热不明显时,性能非常差(swap优化不到位或者R不太关注swap,特别是执行数据压缩时,cpu消耗很大)
  • 对于集合类型的操作,R明显是比M好的(天生支持hashes、lists、sets、sorted sets,减少网络开销)

总结

M更适合分布式缓存,如果你不care缓存穿透和缓存丢失。
R更适合数据存储,同时它的内存存储方式可以大大提高操作效率,问题在于它对于事务支持的缺少。但是R并不适合单纯的存储系统,这方面Mongodb会是更好的选择。

© 著作权归作者所有

共有 人打赏支持
chris_2009
粉丝 3
博文 10
码字总数 8066
作品 0
深圳
高级程序员
Redis与Memcached简要比较

如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 2 Redis支持数据的备份,即master-...

蓝狐乐队
2014/05/22
0
0
Redis与Memcached比较

如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 2 Redis支持数据的备份,即master-...

阿莱倪士
2014/02/22
0
0
Redis与Memcached的区别

如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 2 Redis支持数据的备份,即master-...

brivio
2014/02/08
0
0
Redis,Memcache,mongoDB的区别

从以下几个维度,对redis、memcache、mongoDB 做了对比,欢迎拍砖 1、性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2、操作的便利性...

Surjur
2014/12/02
0
0
Redis 和 memcached 区别

REDIS与MEMCACHED的区别(转) 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 2 Re...

5431039
2016/04/16
0
0
从以下几个维度,对redis、memcache、mongoDB 做了对比

1、性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2、操作的便利性 memcache数据结构单一 redis丰富一些,数据操作方面,redis更好一...

安安-Anan
2015/08/10
0
0
redis, memcached, mongo性能比较

1、性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2、操作的便利性 memcache数据结构单一 redis丰富一些,数据操作方面,redis更好一...

无精疯
04/23
0
0
关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用

先说我自己用的情况: 最先用的memcache ,用于键值对关系的服务器端缓存,用于存储一些常用的不是很大,但需要快速反应的数据 然后,在另一个地方,要用到redis,然后就去研究了下redis. 一看...

niceguy_php
2014/06/18
0
2
redis数据库安装配置

一、Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括string、list、set...

qq441009395
2017/09/02
0
0
redis、mongodb、memcache

1、性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面Redis和memcache差不多,要大于MongoDB 2、操作的便利性 memcache数据结构单一(key-value) redis支持的数据类型更多,数...

大白来袭
2017/06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

TensorFlow 作用域与操作符的受限范围

variable_scope 影响变量和操作符 name_scope 只影响操作符 with tf.name_scope(""),使用空字符串将作用域返回到顶层 tf.variable_scope("") 相当于添加一个空层 import tensorflow as tf...

阿豪boy
5分钟前
0
0
Java面试基础篇——第六篇:常见Map类的区别

常见的map类有: HashMap, ConcurrentHashMap (Jdk1.8) , LinkedHashMap, TreeMap, Hashtable。 其中我们最常用的莫过于HashMap, 和并发情况下使用的ConcurrentHashMap了,它们的主要区别就在...

developlee的潇洒人生
6分钟前
0
0
崛起于Springboot2.X之前端模版freemaker(23)

1、配置文件 spring: freemarker: allow-request-override: false cache: true check-template-location: true charset: UTF-8 content-type: text/html ......

木九天
23分钟前
1
0
spring-boot:run启动时,指定spring.profiles.active

Maven启动指定Profile通过-P,如mvn spring-boot:run -Ptest,但这是Maven的Profile。 如果要指定spring-boot的spring.profiles.active,则必须使用mvn spring-boot:run -Drun.profiles=test......

夜黑人模糊灬
25分钟前
0
0
大数据分析挖掘技术学习:Python文本分类

引言 文本分类作为自然语言处理任务之一,被广泛应用于解决各种商业领域的问题。文本分类的目的是将 文本/文档 自动地归类为一种或多种预定义的类别。常见的文本分类应用如下: • 理解社交媒...

加米谷大数据
29分钟前
0
0
istio-0.8 指标监控,prometheus,grafana

配置: https://istio.io/docs/tasks/telemetry/metrics-logs/ https://istio.io/docs/tasks/telemetry/tcp-metrics/ envoy拦截请求>上报mixer>对接prometheus>grafana 效果截图: promethe......

xiaomin0322
31分钟前
0
0
公众号推荐

阿里技术 书籍:《不止代码》

courtzjl
34分钟前
0
0
关于改进工作效率

1.给不同的业务线建立需求群,所有的数据需求都在群里面提。 2.对于特别难搞定的事情,到对应的技术哪去做,有问题随时沟通。 3.定期给工作总结形成方法论。 4.学习新的技术,尝试用新的方法...

Avner
41分钟前
0
0
关于thinkphp 框架开启路径重写,无法获取Authorization Header

今天遇到在thinkphp框架中获取不到header头里边的 Authorization ,后来在.htaccess里面加多一项解决,记录下: <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews Rewrite......

殘留回憶
45分钟前
0
0
centos 使用yum安装nginx后如何添加模块 10

centos 使用yum安装nginx后如何添加模块 10 centos6.2版本,使用yum来安装了nginx,但是最近需要重新添加模块,所以就傻了,询问下有人知道怎么重新添加模块吗? PS:俺是新手,需要高手救助...

linjin200
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部