公告:网址大全导航目录www.btv85.com为各位站长提供免费收录网站的服务,VIP会员每天提交网站30、文章30免审核,快审服务(10元/站),可自助充值发布。

点击这里在线咨询客服 点击这里在线咨询客服
新站提交
  • 网站:223084
  • 待审:0
  • 小程序:16453
  • 文章:25974
  • 会员:228

今天BTV导航网的小编为你讲一下服务器端缓存失效的应对办法经验总结相关的内容。

缓存失效情况举例
看下这个段伪代码:

复制代码
代码如下:

local value = get_from_cache(key)
if not value then
value = query_db(sql)
set_to_cache(value, timeout = 100)
end
return value

看上去没有问题,在单元测试情况下,也不会有异常。
但是,进行压力测试的时候,你会发现,每隔100秒,数据库的查询就会出现一次峰值。如果你的cache失效时间设置的比较长,那么这个问题被发现的机率就会降低。
为什么会出现峰值呢?想象一下,在cache失效的瞬间,如果并发请求有1000条同时到了 query_db(sql) 这个函数会怎样?没错,会有1000个请求打向数据库。这就是缓存失效瞬间引起的风暴。它有一个英文名,叫 "dog-pile effect"。
怎么解决?自然的想法是发现缓存失效后,加一把锁来控制数据库的请求。具体的细节,春哥在lua-resty-lock的文档里面做了详细的说明,我就不重复了,请看这里。多说一句,lua-resty-lock库本身已经替你完成了wait for lock的过程,看代码的时候需要注意下这个细节。

传统缓存失效应对策略
为了提高业务访问速度,提升业务读并发,很多用户都会在业务架构中引入缓存层。业务所有读请求全部路由到缓存层,通过缓存的内存读取机制大大提升业务读取性能。缓存中的数据不能持久化 ,一旦缓存异常退出,那么内存中的数据就会丢失,所以为了保证数据完整,业务的更新数据会落地到持久化存储中,例如DB。目前云用户的业务架构一般如下图:
2016621105005137.png (868×425)

在上图中,大家可以看到,用户的更新数据直接持久化到DB, 业务读请求直接请求缓存数据,所以业务需要解决缓存失效问题,即解决因为数据变更导致缓存中的数据失效的问题。 目前业务解决缓存失效问题的解决方法一般是业务实现DB、缓存双写。通过业务双写解决缓存失效,存在如下的问题:
代码侵入性比较强,需要双写两份存储,任何对DB的数据变更,都需要同时更新缓存,代码层面后期可维护程度不高
用户请求线程里同步调用缓存,对缓存存在强以来,遇到缓存超时等异常时,没有办法做到有效的重试,遇到异常给用户返回系统错误、操作失败等信息,严重影响用户体验
用户请求线程里同步完成DB、缓存双写,变更请求链路长,访问延迟大,影响用户体验
RDS数据订阅消费,轻松解决缓存失效
在阿里巴巴内部同样也遇到了缓存失效的问题,随着业务架构得不断调整优化,我们已经沉淀出一套高可靠、极优雅得缓存失效架构。即通过数据传输提供的数据订阅功能,异步获取DB(例如公共云上的RDS)的增量数据,根据增量数据进行缓存失效。具体的架构类似下图:
2016621105032077.png (868×663)

在这个架构里面,缓存更新流程如下:
1.业务完成DB更新后即返回请求
2.数据订阅通过日志解析方式实时解析并订阅DB的增量更新数据,当发现DB有数据更新时,将增量数据推送给下游消费者
3.下游消费业务一旦接收到增量更新数据,即调用消费线程进行缓存更新
至此完成整个缓存更新过程。
从上面的缓存失效流程,可以看出这种缓存失效机制:
1.更新路径短,延迟低: 缓存失效为异步流程,业务更新DB完成后直接返回,不需要关心缓存失效流程,整个更新路径短,更新延迟低
2.应用简单可靠:应用无需实现复杂双写逻辑,只需启动异步线程监听增量数据,更新缓存数据即可
3.应用更新无性能消耗:因为数据订阅是通过解析DB的增量日志来获取增量数据,获取数据的过程对业务、DB性能无损

小结
数据订阅功能为阿里云数据传输提供的一种数据分发方式。通过数据订阅实现的缓存失效策略,让业务更新更快捷,让业务逻辑更简单、更可靠。
数据订阅只是数据传输提供的一种传输方式,除数据订阅之外,数据传输还提供了数据实时同步,不停服迁移等多种传输能力,如需了解数据传输更多详情,请猛击数据传输。

通过对服务器端缓存失效的应对办法经验总结的详细介绍,希望对你有所帮助,我们提供了更多和服务器端缓存失效的应对方法经验总结类似的相关内容推荐,可以你更全面的帮助你解决问题。我们BTV85网址导航还提供网址收录服务,你可以注册提交你的网站信息,帮你引导搜索引擎蜘蛛,同时还有网站SEO优化交流微信群,里面很多SEO高手和大咖,加友链,可以免费进群。

服务器端缓存失效的应对办法经验总结同类内容推荐:
  • 和平精英空投箱升级和扫描办法分享

    和平精英空投箱玩法在更新后开启了新功能,包含升级和扫描两种玩法,玩家可以扫描其他朋友的空投获得物资。下面 2023-03-04

  • 开罗拉面店金币获取办法说明

    开罗拉面店金币怎么获得?金币是游戏内的主要货币,可以用来购买各种材料,前期金币消耗量是比较大的,需要想办法获 2023-03-03

  • 开罗拉面店人气提高办法攻略

    开罗拉面店人气怎么提升?游戏内人气是很重要的数值,主要有总店人气、拉面店人气两个方面,人气过低会影响收益。 2023-03-03

  • 原神风物之歌按键设置办法

    原神风物之歌怎么设置按键?风物之歌是风花节活动之一,玩家需要用按键演奏乐曲,每完成一场就能获得原石和材料奖 2023-03-03

  • 航海王热血航线新世界烟鬼对抗办法说明

    航海王热血航线新世界烟鬼怎么克制?新世界烟鬼在竞技场里面表现很出色,一些玩家在遇到对面有新世界烟鬼之后,不 2023-03-03

  • 森林之子力量提高办法说明

    森林之子力量怎么提升?游戏内力量是非常重要的人物属性,对体力、生命和攻击力会有影响,提升力量是很有必要的。 2023-03-02

  • 大话西游归来新手快速升级办法

    大话西游归来怎么快速升级?游戏正式开启公测,新玩家前期主要的事情就是提升等级,而升级途径很多,该如何提升效率 2023-03-02

  • 黎明觉醒生机营地勋章获取办法说明

    黎明觉醒生机营地勋章怎么获得?“营地”是游戏的特色玩法之一,其中营地勋章非常稀有的一种道具,有了它就能迁居 2023-03-02

  • 黎明觉醒生机辐射岛任务完成办法

    黎明觉醒生机辐射岛任务怎么做?辐射岛中能够接到一些委托任务,这些任务难度不大,跟随指引即可轻松完成,奖励还不 2023-03-02

  • 黎明觉醒生机草地宝箱开启办法

    黎明觉醒生机草地宝箱怎么打开?游戏里面宝箱非常多,其中草地宝箱的奖励很多错,但是需要指定的钥匙才能开启。下 2023-03-01

  •   admin

    注册时间:

    网站:0 个   小程序:0 个  文章:0 篇

    • 223084

      网站

    • 16453

      小程序

    • 25974

      文章

    • 228

      会员

    赶快注册账号,推广您的网站吧!
    热门网站
    最新入驻小程序

    小朋友猜谜语2021-05-24

    小朋友猜谜语是一款学习教育类的

    球比分2021-05-24

    球比分是一款体育运动类的小程序

    匠人名片2021-05-24

    匠人名片是一款交友社交类的小程

    知晴2021-05-24

    知晴是一款生活服务类的小程序应

    优惠券查询工具2021-05-24

    优惠券查询工具是一款其他工具类

    成语词典汉字拼音故事大全字典2021-05-24

    成语词典汉字拼音故事大全字典是