【Redis篇03】redis缓存-缓存击穿(缓存时间失效)

39 阅读1分钟
概念

热点缓存设置了过期时间,恰好在过期的这个时间点上,有大量并发请求过来,造成请求直接落到DB上,把数据库压垮。

image.png

解决方案:
  • 添加锁(互斥锁、读写锁)
  • 逻辑过期

分布式锁
当请求请求,线程一先获取锁,如果获取到锁,就去查询redis缓存,redis缓存没有数据,再向数据库查询,如果查询到数据,缓存进入redis,然后释放锁。返回响应

线程二请求,线程一也是先去获取锁,如果没有获取到锁,就休眠等待,直到当其他线程释放了锁,它获取到锁。这是一样先去请求redis缓存,此时热点缓存已经重建了,所以它将从redis中获取到数据。返回响应

特点:性能相对比较低 数据强一致

逻辑过期
热点缓存不设置过期时间,在存储数据时添加一个时间字段e,用它来描述数据是否过期。当e是过期的,我们使用一个互斥锁来控制缓存的重建线程(同步的),其他线程不用等待获取失败直接返回。

特点:性能相对高 数据最终一致