广州网站优,7一12岁手工科技小制作,建设局局长权力大吗,杭州设计公司网站排名缓存在架构设计中占有重要地位。缓存在提升性能中也扮演重要的角色。常见的有对资源的缓存#xff0c;比如数据库连接池、http连接池#xff0c;还有对数据的缓存等。缓存的设计可复杂也可简单#xff0c;但是需要考虑的点却很多。
缓存对象 设计缓存的时候一定要考虑的是nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;缓存在架构设计中占有重要地位。缓存在提升性能中也扮演重要的角色。常见的有对资源的缓存比如数据库连接池、http连接池还有对数据的缓存等。缓存的设计可复杂也可简单但是需要考虑的点却很多。
缓存对象
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;设计缓存的时候一定要考虑的是缓存的对象是什么缓存哪些对象。缓存对象一定是热数据也就是频繁被访问。把对象加载到内存是以牺牲内存为代价的如果缓存的对象不经常访问那么就是在浪费内存并且不但不会提升性能还会因为命中率低的原因降低性能。
缓存的大小
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;因为内存是有限的所以缓存不能无限大那么就要决定缓存多少数据以保证内存不被撑爆。
缓存一致性
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;缓存一致性是必须要考虑的点。很多缓存设计都忘记了这一点导致在使用缓存的时候经常返回过期数据。数据在更新的时候缓存可以采用如下几个策略1.将缓存中的数据设置为无效或者删除再次查询的时候重新去数据库查询并更新缓存2.更新数据时先更新缓存再更新数据库或者先更新缓存之后异步刷新到数据库3.直接更新数据库缓存定期去数据库同步最新数据这种方式需要容忍一定时间内的不一致。缓存刷新策略一定要明确。作者本人在工作中遇到过这种情况更新数据的接口有两个其中一个更新缓存后更新数据库另一个直接去更新的数据库由于没有同步机制导致总是偶现数据不一致的情况而且只能重启来规避。
缓存在哪里
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;对于缓存数据的存储位置也是需要考虑的。如果是分布式系统或者近期会重构成分布式的系统缓存需要集中存储比如使用redis做缓存。如果是单机系统最简单的方式就是缓存到内存中。缓存的存储位置的访问一定要快于数据的存储位置不然缓存就没有意义了。
缓存流程 缓存流程
经典缓存问题
1.缓存穿透
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;缓存穿透是指客户端访问即不在缓存中的数据又不在数据库中的数据。这种访问过多会导致数据库挂掉影响正常访问。对于这种问题可以在数据访问前做校验过滤掉不存在的数据访问必须不合法的查询字段或者使用布隆过滤器筛选掉不存在的数据也可以将不存在的数据在缓存中建立空值缓存。
2.缓存击穿
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;缓存击穿是指客户端访问不在缓存中但数据库中存在的数据。如果对某个key的访问量很大这个时候缓存过期了那么就会有很多的访问漏到数据库层面去访问数据。这个问题可以采用如下方法解决热点数据常驻缓存访问在缓存中没有拿到数据在需要去数据库中访问数据时加锁处理只漏过一个访问去数据库查询数据并将数据更新到缓存其他访问加锁失败后续从缓存中取数据。
3.缓存雪崩
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;缓存雪崩是指大量的key过期导致访问落到数据库上。这个问题的解决方法如下
nbsp;nbsp;nbsp;nbsp;1.每个缓存数据设置不同的缓存时间避免大量的缓存同时过期
nbsp;nbsp;nbsp;nbsp;2.添加的节点预热。在需要添加缓存节点的时候先做缓存预热避免大量访问未命中的情况
nbsp;nbsp;nbsp;nbsp;3.对于热点数据的判断采用延迟的策略。在访问缓存中不存在的数据的时候不直接将它设置成最热数据而是设置到缓存数据按热度排序中间的位置避免某一时刻大量访问冷数据导致热数据被剔除缓存的情况。
建议
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;不建议在架构设计的最初阶段就采用缓存。首先采用缓存容易掩盖一些问题比如业务逻辑导致的性能低下在由于缓存的存在在初期不容易暴露再有就是在最初阶段有的时候很难去判断什么是热数据什么是冷数据需要缓存什么如果已经确定要在系统中引入缓存那么一定要考虑好上面的几点。