Architecture
晨雾暮霞
这个作者很懒,什么都没留下…
展开
-
缓存失效
如果大量的数据在同一时间加载进缓存,而设置的缓存过期时间又一样(比如都是5分钟过期),就会造成同一时间有大量的缓存失效,需要去持久层(DB)重新加载数据,会对数据库造成很大的压力。 这种情况下,首先想到的就是将数据的缓存失效时间尽量分开,比如可以在默认的失效时间基础上加上一个范围可控的随机数。原创 2017-03-26 19:12:37 · 429 阅读 · 0 评论 -
缓存雪崩
缓存雪崩是指由于缓存层数据在同一时间大面积失效,或者缓存层宕机等原因,造成大量请求涌向后端持久层(DB),造成持久层过载而崩溃。 这种情况可以尽量将缓存数据的失效时间设置长一些,同时选择在业务低峰时间段(比如凌晨)全量更新缓存数据。对持久层的访问设置流控,也可以起到保护持久层的作用。原创 2017-03-26 19:29:58 · 605 阅读 · 0 评论 -
缓存并发
在高并发场景下,如果缓存中的某条数据失效,就会出现多个相同Key的请求同时查询持久层(DB),并且同时将这个Key对应的value保存到缓存中的情况。不但频繁更新缓存,而且使数据库压力大,出现过载风险。 这种情况可以给缓存对应的数据上锁,其它相同Key的请求等待第一条请求Key从持久层更新好缓存后,再从缓存中查询。但是这种方式会造成其它请求等待,可以根据实际情况决定是否让其它请求原创 2017-03-26 19:03:16 · 662 阅读 · 0 评论 -
缓存穿透
在项目中使用缓存,请求数据在缓存中没有查询到,就会去持久层(DB)查询,然后在返回数据给请求方的同时,会将数据同步存放在缓存中,以便下次相同数据请求的时候,快速响应并减轻持久层的压力。但是如果该请求数据在持久层也没有查询到,就不会有返回结果存放到缓存中,因此该请求每次都会重复的到持久层查询,使缓存没有起到应有的效果,从而加重了整个系统的压力。 为了防止缓存穿透,可以将空的响应请求原创 2017-03-26 15:24:36 · 599 阅读 · 0 评论