缓存击穿 本地锁的解决
作者:互联网
产生缓存击穿的原因
发生缓存击穿的原因是在高并发场景下 大量请求访问一个已失效数据 频繁访问数据库 导致数据库宕机
解决方案
可以引入本地锁
因为在springboot 容器中的bean都是单例 所以只要锁住当前对象即可
在进行缓存查询时 若发现在缓存中数据不存在 去数据库中查询 在数据库查询时添加一把互斥锁 只有拿到锁才能进行查询
在进行数据库查询前 先判断缓存中是否有数据 如果有数据就不用在进行查询了 否则在进行查询时只是将线程阻塞掉了 当释放锁后 还会再次查询数据库
查询后的结果保存到缓存中 然后释放锁 当下一个请求进行访问缓存时, 此时缓存中已有数据 就不会出现缓存击穿的问题
本地锁的业务实现
/*
* 加锁业务流程:
* 1. 判断redis是否有缓存数据
* 2. 若有缓存数据 直接反序列化对象并进行返回
* 若缓存中无数据 则进行数据库查询 并将缓存结果保存至redis中
* */
标签:缓存,数据库,击穿,查询,本地,数据,进行 来源: https://www.cnblogs.com/lyraHeartstrings/p/15919794.html