memcache和redis是互联网分层架构中,最常用的KV缓存。不少同学在选型的时候会纠结,到底是选择memcache还是redis?

memcache提供的功能是redis提供的功能的子集,不用想太多,选redis准没错?

redis倾向:

复杂的数据结构:value是哈希,列表,集合,有序集合这类复杂的数据结构时,会选择redis,因为mc无法满足这些需求。用户订单列表,用户消息,帖子评论列表等。

持久化: mc无法满足持久化的需求,只得选择redis。但是千万不要把redis真的做数据库用

a. redis的定期快照不能保证数据不丢失

b.redis的AOF会降低效率,并且不能支持太大的数据量

c.不要期望redis做固化存储会比mysql做得好,不同的工具做各自擅长的事情

d.redis挂掉重启后能够快速恢复热数据,但是如果着期间有数据修改,可能导致数据不一致,因此,只读场景,或者允许一些不一致的业务场景,可以尝试开启redis的固化功能

自带高可用集群: redis自身支持集群,实现主从读写分离功能,官方也提供sentinal哨兵的集群管理工具,实现主从监控,故障转移,memcached实现集群需要二次开发了

但是很多时候需要考虑,真的需要高可用么?缓存很多时候是运行cache miss的,cache挂了可以读db的

存储的内容比较大 : macache 单个value最大存储 1M,超过1M只能用redis了。

注意:纯的k-v 而且数据量特别大,并发也很大 或许使用memcache更合适

a.内存分配:memcache使用 预分配内存池的烦事管理内存,更节省内存分配时间,redis使用临时申请的方式,kennel导致碎片。对比看memcache更快一点

b.memcache把所有的数据存储在物理内存里。redis有自己的VM机制,理论上能够存储比物理内存更多的数据,当数据超量时,会引发swap,把冷数据刷到磁盘上。对比看数据量大时,memcache更快一点

c.memcache使用非阻塞IO复用模型,redis也是使用非阻塞IO复用模型,但由于redis还提供一些非KV存储之外的排序,聚合功能,在执行这些功能时,复杂的CPU计算,会阻塞整个IO调度。从这一点上,由于redis提供的功能较多,mc会更快一些。

d.memcache使用多线程,主线程监听,worker子线程接受请求,执行读写,这个过程中,可能存在锁冲突。redis使用单线程,虽无锁冲突,但难以利用多核的特性提升整体吞吐量。从这一点上,mc会快一些。

代码可读性,代码质量:看过mc和redis的代码,从可读性上说,redis是我见过代码最清爽的软件,甚至没有之一,或许简单是redis设计的初衷,编译redis甚至不需要configure,不需要依赖第三方库,一个make就搞定了。而memcache,可能是考虑了太多的扩展性,多系统的兼容性,代码不清爽,看起来费劲。

redis和memcached选择,对比分析的更多相关文章

  1. Redis与Memcached简单对比(转)

    很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快.但是测试结果基本是Red ...

  2. redis和memcached的对比与选型

    相似处:     1:Memcached与Redis都属于内存内.键值数据存储方案.均属于NoSQL家族,而且都基于同样的键值数据模型.双方都选择将全部数据保存在内存当中,这自然也就让它们成为非常理想 ...

  3. redis和memcached的对比

    redis:① 支持的数据结构比较多 ② 支持集群 ③ 支持数据持久化,RDB.AOF ④ 单个value最大值512MB      ⑤ 单核 memcached: ① 支持K/V结构的数据 ② 不支 ...

  4. 该用哪个:Redis与Memcached之间如何选择呢?

    华为云分布式缓存Redis5.0和Memcached都是华为云DCS的核心产品. 那么在不同的使用场景之下,如何选择Redis5.0和Memcached呢? 就由小编为大家进行详细的数据对比分析吧 R ...

  5. 内存数据库:Redis与Memcached的区别

    Redis与Memcached的区别 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都 ...

  6. Redis和Memcached整体

    Redis和Memcached整体对比 Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较,总体来看还是比较客观的,现总结如下: 1)性能对比:由于R ...

  7. Redis与Memcached的实现对比

    原文链接:http://www.tuicool.com/articles/qUBNZva Memcached 与 Redis ,作为近些年最常用的缓存服务器,相信大家对它们再熟悉不过了.前两年还在学校 ...

  8. mongodb,redis,memcached,mysql对比

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

  9. 分布式缓存技术PK:选择Redis还是Memcached?

    作者:田京昆(腾讯后台研发工程师) 来源:腾云阁(https://www.qcloud.com/community/article/129) Memcached和Redis,作为近些年最常用的缓存服务 ...

随机推荐

  1. kernel build command

    Uboot: make ARCH=arm CROSS_COMPILE=${CC} distclean make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defc ...

  2. (C#基础)各种加密学习

    之前,一直想对这个做一个了解,但是总是坚持不下去,很急躁.最近看了几遍文章,很有感触,于是又来重新开始学习,从最最基础的开始——正所谓“慢就是快”.心态变了,继续吧!上代码! using System ...

  3. 3DES加密解密

    C#3DES加密解密,JAVA.PHP可用 using System; using System.Security.Cryptography; using System.Text; namespace ...

  4. hdu3874

    题解: 和上一题基本相同 插入的时候变一下数值 具体看http://www.cnblogs.com/xuanyiming/p/7921926.html 代码: #include<cstdio&g ...

  5. 工作中遇到的oracle分页查询问题及多表查询相关

    在工作中,有时,我们会用到oracle分页查询.这时,就需要先了解oracle的rownum.rowmun是oracle的伪列,只能用符号(<.<=.!=),而不能用这些符号(>,& ...

  6. DataSetToJSON

    unit FMX.DataSetToJSON; interface uses FireDAC.Comp.Client,Data.DB; function DataSetToJSON(DataSet:T ...

  7. C语言基础:常见循环语句 分类: iOS学习 c语言基础 2015-06-10 21:46 13人阅读 评论(0) 收藏

    for语句 for( 初始化表达式; 循环判断条件  ;增量表达式); while(条件表达式){ 循环体; } 先判断条件表达式,如果为真就执行循环体,执行完再去判断条件表达式 do{ 循环体; } ...

  8. 前端开发 —— BOM

    0. BOM vs. DOM BOM:Browser Object Model,浏览器对象模型,是在 web 中使用 JavaScript 的绝对核心: BOM:提供了独立于内容而与浏览器窗口进行交互 ...

  9. setTimeout设置为0的作用

    调用方式:iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])功能:Evaluates an expression afte ...

  10. [转]G++与GCC的区别

    转自http://www.52pojie.cn/thread-58109-1-1.html 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当 ...