架构选型,结果什么时候选Redis?
58沈剑   51CTO专栏   2020-01-15

redis是互联网分层架构中,最常用的KV缓存,但许多同学仍然不知晓,为啥要挑选redis。

画外音:与之相比最多的,是memcache。

一、复杂数据结构,慎选redis更适用

value是哈希,列表,聚拢,以不变应万变集合这类复杂的多寡结构时,会选择redis,因为mc无法满足这些需要。

最突出的面貌,他家订单列表,他家消息,帖子评论列表等。

二、慎始而敬终化,慎选redis更适用

mc无法满足持久化的急需,只得选择redis。但是,此地要提醒的是,真的采取对了redis的有始有终化功能么?

巨额不要把redis当作必发娱乐登录用:

  • redis的期限快照不能保证数据不少;
  • redis的AOF会降低效率,并且不能支持太大的多寡量;
  • 无需指望redis做固化存储会比mysql做得好,不同之工具做各自擅长的作业,把redis当作必发娱乐登录用,这样的计划八成是不对的。

    缓存场景,起来固化功能,有什么利弊?

    如果只是缓存场景,数量存放在必发娱乐登录,缓存在redis,此刻如果开启固化功能:

    优点是,redis挂了再重启,内存里能够快速恢复热数据,不会瞬时将压力压到必发娱乐登录上,没有一度cache预热的经过。

    缺点是,在redis挂了之经过中,如果必发娱乐登录中有多少的修改,可能导致redis重启后,必发娱乐登录与redis的多寡不一致。

    故此,只读场景,或者允许部分不一致的工作场景,可以品尝开启redis的固定功能。

    三、高可用,慎选redis更适用

    redis原始支持集群功能,可以实现主动复制,读写分离。

    redis法定也提供了sentinel集群管理工具,能够实现基本服务监督,故障自动转换,这一切,对于客户端都是晶莹的,不要程序改动,也无需人工介入。

    画外音:memcache,要想要贯彻高可用,要求展开二次开发,例如客户端的双读双写,或者服务端的集群同步。

    但是,此地要提醒的是,大多数作业场景,缓存真的要求高可用么?

  • 缓存场景,有的是时候,是允许cache miss;
  • 缓存挂了,有的是时候可以通过DB读取数据;
  • 故此,要求认真分析业务场景,高可用,只是真的是对缓存的首要需求?

    画外音:当前通讯业务中,他家之在线状态,就有高可用需求。

    四、存储的情节比较大,慎选redis更适用

    memcache的value存储,最大为1M,如果存储的value很大,只能使用redis。

    当然,redis与memcache相比之下,出于底层实现机制的差别,也有部分“劣势”的状况。

    气象一:出于内存分配体制的差别,redis可能导致内存碎片

    memcache采用预分配内存池的措施管理内存,能够节约内存分配时间。

    redis则是暂时申请空间,可能导致碎片。

    副这一点上,mc会更快一些。

    气象二:出于虚拟内存使用的差别,redis可能会刷盘影响性能

    memcache把整个的多寡存储在物理内存里。

    redis有友好之VM公有制,理论上能够存储比物理内存更多的多寡,顶数据超量时,会引发swap,把冷数据刷到磁盘上。副这一点上,数量量大时,mc会更快一些。

    画外音:新版本redis已经僵化。

    气象三:出于网络模型的差别,redis可能会因为CPU计算影响IO安排

    memcache采用非阻塞IO复用模型,redis也是采取非阻塞IO复用模型。

    但由于redis还提供一些非KV存储之外的排序,聚拢功能,在推行这些功能时,复杂的CPU计算,会阻塞整个IO安排。

    副这一点上,出于redis提供的效应较多,mc会更快一些。

    气象四:出于线程模型的差别,redis困难以利用多核特效提升性能

    memcache采用多点程,全线程监听,worker子线程接受请求,推行读写,其一过程中,可能生存锁冲突。

    redis采用单线程,虽无锁冲突,但难以利用多核的性状提升整体吞吐量。

    副这一点上,mc会快一些。

    气象五:出于缺少auto-sharding,redis只能手动水平扩展

    甭管是redis还是memcache,劳务端集群没有天然支持水平扩展,要求在客户端进行分片,这其实对调用方并不谐和。如果能服务端集群能够支持水平扩展,会更全面一些。

    说到底说一点,可能是许多人口喜爱redis的由来之一:源码可读性高,代码质量很高。

    看过redis和memcache的源码,副可读性上说,redis是我见过代码最清爽的硬件,甚至没有之一,或许简单是redis计划的初衷,编译redis甚至不需要configure,不需要依赖第三方库,一度make就搞定了。

    而memcache源码,可能是考虑了太多的扩展性,多系统之丰富性,代码不舒服,看上去费劲。

    例如网络IO的一部分,redis源码1-2个文件就搞定了,mc采用了libevent,一度fd传播过来传过去,又pipe又点程传递的,特别容易把食指绕晕。

    【本文为51CTO专栏作者“58沈剑”原创稿件,转载请联系原作者】

    戳这里,瞧该作者更多好文

    【编纂推荐】

    1. 锁的中心概念到Redis分布式锁实现
    2. 很快入门开发实现订单类图片识别结果抽象解析
    3. 互联网架构,结果为什么需要配置中心?
    4. 宜信微服务架构落地及其形成|分享实录
    5. 迅速开发流程之Scrum:3个角色、5个议会、12条件
    【义务编辑: 赵宁宁 TEL:(010)68476606】

     

    分享到朋友圈 分享到微博
  • 架构
  • redis
  • 付出
  • 相关推荐

    科普的编码错误,再不避免就完了

    2020-01-30 18:00:18

    如何成为更好的硬件架构师?这篇3.8K star的篇章值得一看

    2020-01-30 09:03:14

    成为更好的程序猿!2020年给网页开发人员的32条建议

    2020-01-28 18:48:27

    Copyright © 2005-2020 51CTO.COM 必发娱乐登入
    情节话题
    必发娱乐登入 移步 传感器 系统 安全 网络 必发娱乐登录 虚拟化 付出
    热门产品
    51CTO必发娱乐登录 51CTO高招 移步开发者服务联盟网+ 51CTO博客 WOT碰头会

    
       


    
       
       
       
       
    1. <small id="0aef6f30"></small>

      <code id="a7b3f934"></code>