redis和memcached选择,对比分析

   memcache和redis是互联网分层架构中,最经常使用的KV缓存。很多同窗在选型的时候会纠结,究竟是选择memcache仍是redis?mysql

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

   

redis倾向:sql

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

   持久化: mc没法知足持久化的需求,只得选择redis。可是千万不要把redis真的作数据库用缓存

                     a. redis的按期快照不能保证数据不丢失数据结构

                     b.redis的AOF会下降效率,而且不能支持太大的数据量多线程

                     c.不要指望redis作固化存储会比mysql作得好,不一样的工具作各自擅长的事情架构

                     d.redis挂掉重启后可以快速恢复热数据,可是若是着期间有数据修改,可能致使数据不一致,所以,只读场景,或者容许一些不一致的业务场景,能够尝试开启redis的固化功能并发

   自带高可用集群: redis自身支持集群,实现主从读写分离功能,官方也提供sentinal哨兵的集群管理工具,实现主从监控,故障转移,memcached实现集群须要二次开发了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,多是考虑了太多的扩展性,多系统的兼容性,代码不清爽,看起来费劲。

相关文章
相关标签/搜索