热点数据缓存设置过期时间,过期的时候恰好发来了大量并发请求,大量并发请求可能直接导致数据库宕机。
在缓存重建之前加互斥锁,只有拿到锁的线程才会进行缓存重建,没有拿到锁的线程则会休眠重试。
没有拿到锁的线程会一直等待,性能较低。(强一致,性能差)
不给缓存设置真实的过期时间,而是新增一个过期时间字段,当查询到缓存时,判断这个数据是否真正过期了,如果是,新开一个线程进行缓存重建,当前线程则直接返回旧数据即可。缓存重建的过程同样需要加锁,对于没有抢到锁的线程,也是直接返回旧数据。
虽然性能得到了提升,但是查询到的数据可能是旧数据。(高可用,性能优,但数据可能不一致)

