Redis分布式锁如何防止缓存击穿
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"Redis分布式锁如何防止缓存击穿",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Redis分布式锁如何防止缓存击穿"这篇文章吧。
千家信息网最后更新 2026年11月01日Redis分布式锁如何防止缓存击穿
这篇文章主要为大家展示了"Redis分布式锁如何防止缓存击穿",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Redis分布式锁如何防止缓存击穿"这篇文章吧。
缓存击穿
和缓存穿透不同的是,缓存击穿是指:缓存中没有,但是数据库中存在的热点数据。
例如:首页的热点新闻,并发访问量非常大的热点数据,如果缓存过期失效,服务器会去查询DB,这时候如果大量的并发去查询DB,可能会瞬间压垮DB。
画了个简图,如下所示:
解决方案:DB查询加分布式锁。
未加锁的情况
解决问题之前,先看一下不做处理的代码和运行情况。
根据商品ID查询商品详情代码
清空Redis缓存,开启5个线程去并发访问测试,测试代码如下:
我们预期希望DB只查询一次,后面4个查询从Redis缓存中取就行,但是结果:
没有加分布式锁,结果也在意料之中,但是这样容器给DB造成很大压力。
如果是单台服务器,直接使用Java的同步锁即可
遗憾的是,通常后端是会部署集群的,Java的同步锁可没办法实现分布式锁。
Redis分布式锁解决缓存击穿
Java的内置锁只能应用在单台机器上,无法实现分布式,可以巧用Redis来实现分布式锁。
加了分布式锁后的代码
//根据ID查询商品@GetMapping("/{id}")public R id(@PathVariable String id){ //先查Redis缓存 Object o = redisTemplate.opsForValue().get(id); if (o != null) { //命中缓存 System.err.println("id:"+id+",命中redis缓存..."); return R.success(o); } //缓存未命中 查询数据库 String lockKey = "lock" + id; //加锁,10s后过期 for (;;) { if (redisTemplate.opsForValue().setIfAbsent(lockKey, System.currentTimeMillis(), 10L, TimeUnit.SECONDS)) { //加锁成功的线程,再次检查 o = redisTemplate.opsForValue().get(id); if (o != null) { //命中缓存 System.err.println("Thread:" + Thread.currentThread().getName() + ",id:"+id+",命中redis缓存..."); //释放锁 redisTemplate.delete(lockKey); return R.success(o); } //仍未命中 System.err.println("Thread:" + Thread.currentThread().getName() + ",id:" + id + ",查询DB..."); Goods goods = goodsMapper.selectById(id); //结果存入Redis redisTemplate.opsForValue().set(id, goods); //释放锁 redisTemplate.delete(lockKey); return R.success(goods); } //竞争不到锁,暂时让出CPU资源 Thread.yield(); }}启动5个线程,并发访问,结果如下图:
以上是"Redis分布式锁如何防止缓存击穿"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
缓存
分布式
查询
代码
数据
结果
内容
商品
热点
篇文章
线程
情况
数据库
服务器
同步
学习
帮助
服务
测试
不同
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技海报
有格互联网科技
互联网巨头反垄断金融科技
互联网科技集团
狮子座互联网科技
奇酷互联网科技
艾特科技互联网
狮子座互联网科技有限公司
沃里互联网科技
万达互联网科技
猫创互联网科技
大白互联网科技
厦门比较好的科技互联网公司
宝灵互联网科技有限公司
银川新华互联网科技学校联系电话
互联网科技公司营业执照怎么办理
信承诺互联网科技有限公司
云鲸互联网络科技有限公司
同城互联网络科技
青岛易易互联网科技
金诺互联网科技
腾讯阿里互联网科技
华宇互联网科技
万达互联网科技
亿人帮互联网科技
广西拼得多互联网科技有限公司
和信科技工业互联网
互联网科技的全部知识
互联网金融金融科技
互联网科技大会大佬