Redis缓存击穿
缓存处理流程
接收到查询数据请求时,优先从缓存中查询,若缓存中有数据,则直接返回,若缓存中查不到则从DB中查询,将查询的结果更新到缓存中,并返回查询结果,若DB中查不到,则返回空数据
什么是缓存击穿
某一个数据缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,严重情况下会直接挂掉。
解决方案:
- 添加互斥锁:
ReentrantLock公平锁
根据key值加锁,这样线程之间会不影响,不会因为某一个线程获取了锁,其它线程就处于等待时间,也就是线程A从数据库取key1的数据并不妨碍线程B取key2的数据 - 设置热点数据永不过期(物理上的不过期、“逻辑上”的不过期(缓存到期动态构建缓存))


浙公网安备 33010602011771号