图片 1

Memcached和Redis相比

Posted by

一、存储

Memcached基本只协助轻松的key-value存款和储蓄格局。
Redis除key-value之外,还扶持list,set,sorted set,hash等数据结构;
Redis帮助数据的备份,即master-slave格局的数据备份;
Redis帮助数据的悠久化(快速照相、AOF卡塔尔,能够将内部存款和储蓄器中的数据保持在磁盘中,重启的时候能够再一次加载举行应用;
Redis能够兑现主从复制,实现故障复苏;
Redis的Sharding本事,相当的轻巧将数据分布到八个Redis实例中。

数据结构
Redis扶持七种数据结构,String、Set、List、Hash、SortedSet。
Memcached基本只帮衬轻松的key-value存款和储蓄,不支持枚举,不援助长久化和复制等效用。

内部存款和储蓄器管理
Memcached使用预分配的内部存款和储蓄器池的方法,使用slab和大小不等的chunk来治本内部存款和储蓄器,Item依据大小选拔合适的chunk存款和储蓄,内部存储器池的点子得以节约申请/释放内部存款和储蓄器的支出,并且能减小内部存款和储蓄器碎片发生,但这种办法也会带来一定水平上的上空浪费,并且在内部存款和储蓄器仍然有一点都不小空间时,新的数额也说不好会被删去。

1.网络IO模型

二、数据意气风发致性

Memcached的cas命令在并发场景下,保障数据的风流罗曼蒂克致性。 
Redis事务帮助比较弱,只可以保险工作中的每种操作一而再进行。

Redis使用现场申请内部存款和储蓄器的主意来积存数据,并且少之甚少使用free-list等情势来优化内部存款和储蓄器分配,会在肯定程度上存在内部存款和储蓄器碎片,Redis跟据存储命令参数,会把带过期时间的多寡单独寄存在风度翩翩道,并把它们称为有时数据,非有的时候数据是恒久不会被删去的,固然物理内部存款和储蓄器缺乏,导致swap也不会删除其余非一时数据(但会尝试剔除部分有的时候数据),那点上Redis更符合当做存款和储蓄并不是cache。Redis当物理内部存款和储蓄器用完时,可以将部分比较久没用到的value
沟通到磁盘。

  Memcached是多线程,非拥塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听互联网连接,接收伏乞后,将接连描述字pipe
传递给worker线程,实行读写IO,
网络层使用libevent封装的风云库,多线程模型能够发挥多核功用,不过引进了cache
coherency和锁的主题材料,比方,Memcached最常用的stats
命令,实际Memcached全部操作都要对那几个全局变量加锁,实行计数等专业,带来了品质损耗。

三、内部存款和储蓄器管理

  Memcached使用预分配的内部存储器池的措施。使用slab和分寸不豆蔻梢头的chunk来管理内部存款和储蓄器,Item依据大小选用符合的chunk存款和储蓄,内部存款和储蓄器池的不二秘技得以节省申请/释放内部存款和储蓄器的开采,况兼能减小内部存储器碎片发生,但这种艺术也会带动一定程度上的半空中浪费,並且在内部存款和储蓄器依然有极大空间时,新的数目也大概会被剔除。
  Redis使用现场报名内部存款和储蓄器的法子来囤积数据。而且比较少使用free-list等办法来优化内存分配,会在任其自然水平上存在内部存款和储蓄器碎片,Redis跟据存款和储蓄命令参数,会把带过期时间的数量单独寄放在一起,并把它们称为有时数据,非不经常数据是长久不会被删去的,就算物理内部存款和储蓄器非常不足,招致swap也不会删除其余非一时数据(但会尝试剔除部分不常数据),那一点上Redis更相符当做存款和储蓄而不是cache。

互连网模型
Redis使用单线程的IO复用模型,本人包装了二个简单易行的AeEvent事件管理框架,首要完结了epoll、kqueue和select,对于唯有独有IO操作来讲,单线程能够将速度优势发挥到最大,然而Redis也提供了有的简短的测算功用,譬喻排序、聚合等,对于那几个操作,单线程模型实际会严重影响整体吞吐量,CPU总计进程中,整个IO调解都是被堵塞住的。

图片 1

四、网络IO模型

  Memcached是多线程,非堵塞IO复用的互连网模型,分为监听主线程和worker子线程。监听线程监听互连网连接,选用诉求后,将连接描述字pipe传递给worker线程,进行读写IO,网络层使用libevent封装的事件库。多线程模型能够发挥多核功效,然则引进了cache
coherency和锁的主题素材,例如,Memcached最常用的stats
命令,实际Memcached全数操作都要对那几个全局变量加锁,进行计数等专门的工作,带给了质量损耗。
  Redis是单线程的IO复用模型,本身包裹了二个简约的Ae伊芙nt事件管理框架,重要达成了epoll、kqueue和select。对于只有唯有IO操作来讲,单线程能够将速度优势发挥到最大,可是Redis也提供了一些简便的猜度作用,例如排序、聚合等,对于这几个操作,单线程模型实际会严
重影响总体吞吐量,CPU计算进度中,整个IO调节都是被堵塞住的。

Memcache是七十十六线程,非拥塞IO复用的互连网模型,分为监听主线程和worker子线程,监听线程监听互连网连接,选拔央求后,将接连描述字pipe
传递给worker线程,进行读写IO,
互连网层使用libevent封装的风浪库,七十多线程模型可以发布多核功能,然则引进了cache
coherency和锁的主题素材,比方,Memcache最常用的stats
命令,实际Memcache所有操作都要对这几个全局变量加锁,进行计数等工作,带给了品质损耗。

(Memcached网络IO模型)

五、性能

两方的个性都相当高。由于Redis只行使单核,而Memcached能够应用多核,所以在可比上,平均每八个核上Redis在存款和储蓄小数目时比Memcached品质越来越高。而在100k以上的多寡中,Memcached质量要高于Redis,就算Redis目前也在积存大数目标天性上开展优化,然则比起Memcached,依旧稍有没有。无论你接受哪一个,每秒管理央求的次数都不会成为瓶颈。

查阅更加多:

付出二个Wechat小程序实例教程

HTTP公约收拾

PHP安全之Web攻击

秒杀系统规划优化

MySQL优化

Linux下附近的IO模型

备份复苏、持久化、灾后重新建立
Redis协理数据的备份,即master-slave格局的数据备份;redis能够依期保存到磁盘(长久化卡塔 尔(英语:State of Qatar);redis数据遗失后能够通过aof/rdb复苏。
Memcache挂掉后,数据不可苏醒。

应用处景
Redis出来作为NoSQL数据库使用外,还能够用做音讯队列、数据旅社和数据缓存等;
Memcached相符于缓存SQL语句、数据集、客商暂且数据、延迟查询数据和session等。

  Redis使用单线程的IO复用模型,本人包裹了三个简单的AeEvent事件管理框架,主要达成了epoll、kqueue和select,对于唯有唯有IO操作来讲,单线程能够将速度优势发挥到最大,然则Redis也提供了大器晚成都部队分简易的乘除效能,譬喻排序、聚合等,对于这一个操作,单线程模型实际会严重影响总体吞吐量,CPU估测计算进度中,整个IO调整都以被拥塞住的。

  2.内存管理方面

  Memcached使用预分配的内存池的艺术,使用slab和尺寸不生龙活虎的chunk来治本内部存款和储蓄器,Item依照大小选取十二分的chunk存款和储蓄,内部存款和储蓄器池的格局能够节约申请/释放内存的支出,而且能减小内部存款和储蓄器碎片发生,但这种情势也会推动一定水平上的空中浪费,并且在内部存储器依旧有十分的大空间时,新的数量也说不佳会被删去,原因可以参见Timyang的小说:

  Redis使用现场申请内部存款和储蓄器的主意来囤积数据,何况非常少使用free-list等格局来优化内部存款和储蓄器分配,会在必然水平上存在内部存款和储蓄器碎片,Redis跟据存款和储蓄命令参数,会把带过期时间的数目单独贮存在乎气风发道,并把它们称为有时数据,非临时数据是长久不会被删去的,即使物理内部存款和储蓄器远远不够,引致swap也不会删除别的非有时数据(但会尝试剔除部分有时数据),那一点上Redis更切合当做存款和储蓄实际不是cache。

  3.数据生机勃勃致性难题

  Memcached提供了cas命令,能够保险三个冒出国访问谈操作同意气风发份数据的风度翩翩致性难点。
Redis没有提供cas
命令,并不可能保证那点,可是Redis提供了政工的效用,能够保证大器晚成串
命令的原子性,中间不会被其余操作打断。

  4.积存方式及其余地点

  Memcached基本只扶持轻巧的key-value存款和储蓄,不援救枚举,不援救长久化和复制等效果

  Redis除key/value之外,还帮忙list,set,sorted
set,hash等很好多据结构,提供了KEYS

  进行枚举操作,但不可能在线上利用,假若急需枚举线上数据,Redis提供了工具得以直接扫描其dump文件,枚举出全部数据,Redis还同有的时候间提供了持久化和复制等成效。

  5.有关分裂语言的客商端扶助

  在分歧语言的顾客端方面,Memcached和Redis都有抬高的第三方客商端可供接收,但是因为Memcached发展的时光更加持久一些,近年来看在顾客端协助地点,Memcached的不在少数客商端越发成熟牢固,而Redis由于其情商本人就比Memcached复杂,加上小编不断加码新的效率等,对应第三方顾客端跟进速度大概会赶不上,一时只怕供给和煦在第三方客户端底蕴上做些改过本事更加好的运用。

  依据上述相比不难看出,当大家不期望多少被踢出,也许必要除key/value之外的更好多据类型时,也许须要落榜效果时,使用Redis比使用Memcached更适用。

  关于Redis的某个遍布成效

  Redis除了作为存款和储蓄之外还提供了有些此外地点的功能,比方聚合总计、pubsub、scripting等,对于此类效率必要精晓其促成原理,清楚地问询到它的局限性后,技巧正确的施用,举例pubsub效能,这些实在是还未有其余漫长化援助的,费用方连接闪断或重连之间过来的新闻是会整整不见的,又比如聚合总计和scripting等职能受Redis单线程模型所限,是不容许完结异常高的吞吐量的,须求如履薄冰运用。

  说来讲去Redis小编是一个人十一分努力的开辟者,可以经成千成万到笔者在品尝着种种分歧的异样主见和笔触,针对那些方面包车型地铁成效将须求大家供给深远明白后再使用。

  总结:

  1.Redis施用最棒方式是任何数目in-memory。

  2.Redis越来越多现象是作为Memcached的取代者来行使。

  3.当必要除key/value之外的更加非常多据类型辅助时,使用Redis更适用。

  4.当存款和储蓄的数量不可能被剔除时,使用Redis更合适。

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注