网站制作推广公司,宿城区住房和城乡建设局网站,浏览器打开是2345网址导航,大型行业门户网站开发建设缓存击穿的定义
缓存击穿是一种现象#xff0c;具体就是某一个数据过期时#xff0c;恰好有大量的并发请求过来#xff0c;这些并发的请求可能会瞬间把DB压垮。典型场景就是双十一等抢购活动中#xff0c;首页广告页面的数据过期#xff0c;此时刚好大量用户进行请求具体就是某一个数据过期时恰好有大量的并发请求过来这些并发的请求可能会瞬间把DB压垮。典型场景就是双十一等抢购活动中首页广告页面的数据过期此时刚好大量用户进行请求那么数据库很容易抵挡不住从而宕机。
解决方案之一互斥锁分布式锁
当缓存失效时先使用如 Redis 的 setnx 去设置一个互斥锁当查询数据库重建缓存数据成功返回并写入缓存时才释放锁此时其他线程才能继续访问缓存。
优点、缺点、适用场景
优点强一致性 缺点性能较差无法保障高可用性可能产生死锁的问题。 适用场景业务和钱等挂钩时一般要保障强一致性所以选择互斥锁。
解决方案之二逻辑过期
逻辑过期就是除了业务逻辑真正需要的字段如下图的id和title之外还额外设置一个字段用来判断缓存是否过期一般为expire。而key本身是不设置过期时间的。 当查询数据时首先会通过expire字段判断该数据是否过期如果过期则获取互斥锁并开启一个新线程。新线程进行查询db、重建缓存、写入缓存重置逻辑过期时间等操作。**与此同时原线程直接返回过期了的数据。不是等待新线程操作完成**如果以上发现缓存过期的任意过程中有其他线程想要查询该数据也会首先通过expire字段来判断该数据是否过期发现过期且此时新线程还未释放锁就会因获取互斥锁失败而直接返回过期数据如果已经释放了锁那么就直接返回新数据。
优点、缺点、适用场景
优点高可用、性能优 缺点无法保障强一致性。 适用场景除了和钱挂钩等业务场景一般更看重用户体验所以采用逻辑过期。
高可用的定义
高可用Highavailability,缩写为HA)是指系统无中断地执行其功能的能力代表系统的可用性程度。高可用的主要目的是为了保障“业务的连续性”即在用户眼里业务永远是正常对外提供服务的。
面试题回答模板
什么是缓存击穿 ? 怎么解决 ?
背熟以下回答大概用时2分。
缓存击穿是一种现象具体就是某一个数据过期时恰好有大量的并发请求过来这些并发的请求可能会瞬间把DB压垮。典型场景就是双十一等抢购活动中首页广告页面的数据过期此时刚好大量用户进行请求那么数据库很容易抵挡不住从而宕机。针对缓存击穿我们一般有两种解决方案分别是互斥锁和逻辑过期。
互斥锁就是当缓存失效时先使用如 Redis 的 setnx 去设置一个互斥锁当重建缓存成功时才释放锁此时其他线程才能继续访问缓存。它的优点是保障了数据的强一致性缺点是性能较差无法保障高可用性而且可能产生死锁的问题。当业务和钱等挂钩时一般要保障强一致性所以选择互斥锁。
逻辑过期就是除了业务逻辑真正需要的字段之外还额外设置一个字段用来判断缓存是否过期一般为expire。而key本身是不设置过期时间的。 当查询数据时首先会通过expire字段判断该数据是否过期如果过期则获取互斥锁并开启一个新线程去重建缓存。与此同时原线程直接返回过期了的数据。如果以上过程中有其他线程想要查询该数据也会首先通过expire字段来判断该数据是否过期发现过期且此时新线程还未释放锁就会因获取互斥锁失败而直接返回过期数据如果已经释放了锁那么就直接返回新数据。采用逻辑过期的优点就是它有高可用性性能较优。但与此同时就无法保障数据的强一致性。
缓存雪崩
定义
缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机导致大量请求到达数据库带来巨大压力。
解决方案
给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性哨兵模式、集群模式 给缓存业务添加降级限流策略ngxin或spring cloud gateway 给业务添加多级缓存Guava或Caffeine
面试题回答模板
什么是缓存雪崩 ? 怎么解决 ?
缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机导致大量请求到达数据库带来巨大压力。解决方案主要是可以将缓存失效时间分散开比如可以在原有的失效时间基础上增加一个随机值比如1-5分钟随机这样每一个缓存的过期时间的重复率就会降低就很难引发集体失效的事件。
本文所有图片来自于黑马程序员。