1 缓存击穿
1.1 缓存击穿的定义
给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮。
缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
1.2 解决方案
1.2.1 方案一:互斥锁
保证了数据的强一致性,但性能会差。
1.2.2 方案二:逻辑过期
①在设置key的时候,设置一个过期时间字段,一起存入缓存中,注意不给当前key设置TTL过期时间;
②当查询的时候,从redis取出数据后判断时间是否过期;
③如果过期则开通另外一个线程进行数据同步,当前线程正常返回数据,但这个数据不是最新的;
保证了高可用性,性能优,但不能保证数据的绝对一致。
1.3 小结
2 案例分析
需求1:修改根据id查询商铺的业务,基于互斥锁方式来解决缓存击穿问题;
需求2:修改根据id查询商铺的业务,基于逻辑过期方式来解决缓存击穿问题;
注意:基于逻辑过期方式来解决缓存击穿问题时,不用考虑缓存穿透问题(一般数据都是提前预热过的,如果缓存查不到,就可以直接返回;逻辑过期方案的潜台词是,如果缓存不命中就说明资源不存在,因为不需要查数据库,所以可以直接返回空)