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