0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈架构设计中的缓存技术

西西 来源:今日头条 作者:java技术小码农 2020-01-01 10:18 次阅读

缓存在架构设计中占有重要地位。缓存在提升性能中也扮演重要的角色。常见的有对资源的缓存,比如数据库连接池、http连接池,还有对数据的缓存等。缓存的设计可复杂也可简单,但是需要考虑的点却很多。

缓存对象

设计缓存的时候一定要考虑的是,缓存的对象是什么,缓存哪些对象。缓存对象一定是热数据,也就是频繁被访问。把对象加载到内存是以牺牲内存为代价的,如果缓存的对象不经常访问,那么就是在浪费内存,并且不但不会提升性能,还会因为命中率低的原因降低性能。

缓存的大小

因为内存是有限的,所以缓存不能无限大,那么就要决定缓存多少数据以保证内存不被撑爆。

缓存一致性

缓存一致性是必须要考虑的点。很多缓存设计都忘记了这一点,导致在使用缓存的时候经常返回过期数据。数据在更新的时候,缓存可以采用如下几个策略:1.将缓存中的数据设置为无效或者删除,再次查询的时候重新去数据库查询并更新缓存;2.更新数据时,先更新缓存,再更新数据库或者先更新缓存之后异步刷新到数据库;3.直接更新数据库,缓存定期去数据库同步最新数据,这种方式需要容忍一定时间内的不一致。缓存刷新策略一定要明确。作者本人在工作中遇到过这种情况:更新数据的接口有两个,其中一个更新缓存后更新数据库,另一个直接去更新的数据库,由于没有同步机制,导致总是偶现数据不一致的情况,而且只能重启来规避。

缓存在哪里

对于缓存数据的存储位置也是需要考虑的。如果是分布式系统或者近期会重构成分布式的系统,缓存需要集中存储,比如使用redis做缓存。如果是单机系统,最简单的方式就是缓存到内存中。缓存的存储位置的访问一定要快于数据的存储位置,不然缓存就没有意义了。

缓存流程

浅谈架构设计中的缓存技术

缓存流程

经典缓存问题

1.缓存穿透

缓存穿透是指客户端访问即不在缓存中的数据又不在数据库中的数据。这种访问过多会导致数据库挂掉影响正常访问。对于这种问题,可以在数据访问前做校验,过滤掉不存在的数据访问,必须不合法的查询字段或者使用布隆过滤器,筛选掉不存在的数据;也可以将不存在的数据在缓存中建立空值缓存。

2.缓存击穿

缓存击穿是指客户端访问不在缓存中但数据库中存在的数据。如果对某个key的访问量很大,这个时候缓存过期了,那么就会有很多的访问漏到数据库层面去访问数据。这个问题可以采用如下方法解决:热点数据常驻缓存;访问在缓存中没有拿到数据,在需要去数据库中访问数据时加锁处理,只漏过一个访问去数据库查询数据,并将数据更新到缓存,其他访问加锁失败,后续从缓存中取数据。

3.缓存雪崩

缓存雪崩是指大量的key过期,导致访问落到数据库上。这个问题的解决方法如下:1.每个缓存数据设置不同的缓存时间,避免大量的缓存同时过期;2.添加的节点预热。在需要添加缓存节点的时候,先做缓存预热,避免大量访问未命中的情况;3.对于热点数据的判断采用延迟的策略。在访问缓存中不存在的数据的时候,不直接将它设置成最热数据,而是设置到缓存数据按热度排序中间的位置,避免某一时刻大量访问冷数据导致热数据被剔除缓存的情况。

建议

不建议在架构设计的最初阶段就采用缓存。首先,采用缓存容易掩盖一些问题,比如业务逻辑导致的性能低下在由于缓存的存在在初期不容易暴露;再有就是在最初阶段有的时候很难去判断什么是热数据什么是冷数据,需要缓存什么;如果已经确定要在系统中引入缓存那么一定要考虑好上面的几点。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 缓存
    +关注

    关注

    1

    文章

    220

    浏览量

    26413
  • 架构
    +关注

    关注

    1

    文章

    479

    浏览量

    25188
收藏 人收藏

    评论

    相关推荐

    软件架构设计教程

    软件架构设计教程
    发表于 09-26 15:27

    汽车电子电气架构设计及优化措施

    我国公路建设事业的蓬勃发展导致在汽车行业的电子电气架构设计越来越体现消费者对汽车人性化、舒适化与美观性的现实需求。设计汽车的电子电气架构是一项工程量较大的工作,它涉及了硬件、软件、网络、线束等方面
    发表于 10-18 22:10

    【汽车电气架构设计软件】

    因工作需要,求整车电气架构设计软件——PREEvision(盗版),价格可议,WetChat/***,非诚勿扰
    发表于 04-18 14:20

    手机机构设浅谈

    手机机构设浅谈
    发表于 11-13 11:21

    浅谈分布式缓存技术

    wiki上定义的缓存:用于存储数据的硬件或软件组件,以便后续访问相应的数据更快。高速缓存的数据可以是预先计算的结果,数据的副本等。典型应用场景:cpucache,磁盘缓存等。本文中提
    发表于 11-16 15:45

    【设计技巧】FPGA架构设计漫谈

    云:“兵无常势,水无常形”。但是对于一种设计技术来说,没有一种固定演进的架构和设计,那么项目的整个设计层次总是推到重来,从本质上说,就是一种低水平重复。如果总结规律,提炼共性,才能在提升设计层次,在小作坊取得
    发表于 08-02 08:30

    架构设计应用级缓存回收策略

      缓存,笔者的理解是让数据更接近于使用者,目的是让访问速度更快。工作机制是先从缓存读取数据,如果没有,再从慢速设备上读取实际数据并同步到缓存。那些经常读取的数据,频繁访问的数据、热
    发表于 01-14 17:08

    STM32软件架构设计的意义

    STM32软件架构1、架构设计的意义(1)应用代码逻辑清晰,且避免代码冗余;(2)代码通用性,方便软件高速、有效的移植;(3)各功能独立,低耦合高内聚;2、总体架构图3、结构层说明4、遵循规则5、优劣评估6、STM32实例说明
    发表于 08-04 07:23

    对嵌入式系统架构设计的理解

    【阅读这篇文章,你能了解到什么】1. 从事嵌入式开发12年的我,对架构设计的理解;2. 对嵌入式系统架构设计要刻意训练;3. 嵌入式系统开发过程的一些小技巧;4. 一个用于智能家
    发表于 11-08 08:23

    嵌入式软件架构设计资料分享

    作为程序员,我觉得如果要走的更远必须要成为工程师,毕竟年龄和资历都摆在那里了。所以就让我这个老程序员浅谈一下嵌入式软件架构设计。我参考的也是一篇博文。原图如下![在这里插入图片描述](?x-oss-process=image/watermark,type_ZmFuZ3po
    发表于 12-24 07:09

    浅谈三层架构原理

    浅谈三层架构原理
    发表于 01-16 09:14

    SWE.2的软件架构设

    过程ID:SWE.2 过程名称:软件架构设计 过程目的:软件架构设计过程目的是建立一个架构设计,识别哪些软件需求应该分配给软件的哪些要素,并根据已定义的标准评估软件架构设计。   过程
    的头像 发表于 01-11 10:36 2408次阅读

    SYS.3的系统架构设

    系统架构设计 过程ID:SYS.3 过程名称:系统架构设计   过程目的:系统架构设计过程目的,是建立系统架构设计,并确定将哪些系统需求分配给系统的哪些要素,以及根据已定义的准则评估系
    的头像 发表于 02-13 16:02 2319次阅读

    架构与微架构设

    下面将从芯片的架构设计、微架构设计、使用设计文档、设计分区、时钟域和时钟组、架构调整与性能改进、处理器微架构设计策略等角度进行说明,并以视频H.264编码器设计为例。
    的头像 发表于 05-08 10:42 823次阅读
    <b class='flag-5'>架构</b>与微<b class='flag-5'>架构设</b>计

    SWE.2软件架构设

    过程ID : SWE.2 过程名称 : 软件架构设计 过程目的 : 软件架构设计过程目的是建立一个架构设计,识别哪些软件需求应该分配给软件的哪些要素,并根据已定义的标准评估软件架构设
    的头像 发表于 08-24 09:43 457次阅读