缓存击穿
什么是缓存击穿
我们的业务通常会有几个数据会被频繁地访问,比如秒杀活动,这类被频地访问的数据被称为热点数据。
如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿的问题。
存击穿跟缓存雪崩很相似,缓存击穿可以人为是缓存雪崩的一个子集。
缓存击穿的解决方案
互斥锁方案,保证同一时间只有一个业务线程更新缓存,未能获取互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值。这样可以将并发的业务处理或者并行的业务处理编程编程串行的业务处理,让数据库一条一条的执行,大大减少数据库的执行压力,不会导致数据库快速崩溃
不给热点数据设置过期时间,由后台异步更新缓存,或者在热点数据准备要过期前,提前通知后台线程更新缓存以及重新设置过期时间;
这样让缓存数据库中的热点数据可以存在,不至于让业务访问直接取访问数据库。
当发生缓存雪崩或击穿时,数据库中还是保存了应用要访问的数据,一旦缓存恢复相对应的数据,就可以减轻数据库的压力