其他分享
首页 > 其他分享> > 缓存击穿 本地锁的解决

缓存击穿 本地锁的解决

作者:互联网

产生缓存击穿的原因

发生缓存击穿的原因是在高并发场景下 大量请求访问一个已失效数据 频繁访问数据库 导致数据库宕机

解决方案

可以引入本地锁
因为在springboot 容器中的bean都是单例 所以只要锁住当前对象即可
在进行缓存查询时 若发现在缓存中数据不存在 去数据库中查询 在数据库查询时添加一把互斥锁 只有拿到锁才能进行查询
在进行数据库查询前 先判断缓存中是否有数据 如果有数据就不用在进行查询了 否则在进行查询时只是将线程阻塞掉了 当释放锁后 还会再次查询数据库
查询后的结果保存到缓存中 然后释放锁 当下一个请求进行访问缓存时, 此时缓存中已有数据 就不会出现缓存击穿的问题

本地锁的业务实现

        /*
        * 加锁业务流程:
        * 1. 判断redis是否有缓存数据
        * 2. 若有缓存数据 直接反序列化对象并进行返回
        *    若缓存中无数据 则进行数据库查询 并将缓存结果保存至redis中
        * */

标签:缓存,数据库,击穿,查询,本地,数据,进行
来源: https://www.cnblogs.com/lyraHeartstrings/p/15919794.html