返回顶部
首页 > 资讯 > 精选 >Redis分布式锁如何防止缓存击穿
  • 257
分享到

Redis分布式锁如何防止缓存击穿

2023-06-29 01:06:14 257人浏览 八月长安
摘要

这篇文章主要为大家展示了“Redis分布式锁如何防止缓存击穿”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis分布式锁如何防止缓存击穿”这篇文章吧。缓存击穿和缓存穿透不同的是,缓存击穿是指

这篇文章主要为大家展示了“Redis分布式如何防止缓存击穿”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis分布式锁如何防止缓存击穿”这篇文章吧。

缓存击穿

和缓存穿透不同的是,缓存击穿是指:缓存中没有,但是数据库中存在的热点数据。

例如:首页的热点新闻,并发访问量非常大的热点数据,如果缓存过期失效,服务器会去查询DB,这时候如果大量的并发去查询DB,可能会瞬间压垮DB。

画了个简图,如下所示:

Redis分布式锁如何防止缓存击穿

解决方案:DB查询加分布式锁

未加锁的情况

解决问题之前,先看一下不做处理的代码和运行情况。

根据商品ID查询商品详情代码

Redis分布式锁如何防止缓存击穿

清空Redis缓存,开启5个线程去并发访问测试,测试代码如下:

Redis分布式锁如何防止缓存击穿


我们预期希望DB只查询一次,后面4个查询从Redis缓存中取就行,但是结果:
Redis分布式锁如何防止缓存击穿
没有加分布式锁,结果也在意料之中,但是这样容器给DB造成很大压力。

如果是单台服务器,直接使用Java的同步锁即可

Redis分布式锁如何防止缓存击穿

遗憾的是,通常后端是会部署集群的,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);//结果存入RedisredisTemplate.opsForValue().set(id, goods);//释放锁redisTemplate.delete(lockKey);return R.success(goods);}//竞争不到锁,暂时让出CPU资源Thread.yield();}}

启动5个线程,并发访问,结果如下图:

Redis分布式锁如何防止缓存击穿

以上是“Redis分布式锁如何防止缓存击穿”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Redis分布式锁如何防止缓存击穿

本文链接: https://lsjlt.com/news/321697.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis分布式锁如何防止缓存击穿
    这篇文章主要为大家展示了“Redis分布式锁如何防止缓存击穿”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis分布式锁如何防止缓存击穿”这篇文章吧。缓存击穿和缓存穿透不同的是,缓存击穿是指...
    99+
    2023-06-29
  • Redis分布式锁防止缓存击穿的实现
    缓存击穿 和缓存穿透不同的是,缓存击穿是指:缓存中没有,但是数据库中存在的热点数据。 例如:首页的热点新闻,并发访问量非常大的热点数据,如果缓存过期失效,服务器会去查询DB,这时候如...
    99+
    2024-04-02
  • 布隆过滤器实战【防止缓存击穿】
    为什么引入我们的业务中经常会遇到穿库的问题,通常可以通过缓存解决。 如果数据维度比较多,结果数据集合比较大时,缓存的效果就不明显了。 因此为了解决穿库的问题,我们引入Bloom Filter。适合的场景数据...
    99+
    2024-04-02
  • Redis缓存击穿、缓存穿透、缓存雪崩如何解决
    本篇内容介绍了“Redis缓存击穿、缓存穿透、缓存雪崩如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis缓存使用场景Redis...
    99+
    2023-07-05
  • 如何解决redis缓存击穿
    解决 redis 缓存击穿的方法:使用分布式锁防止缓存并发查询,允许持有锁的请求获取数据并更新缓存;限流以减轻数据库压力,防止过多并发查询;缓存空值以阻止直接访问数据库,并强制稍后重试;...
    99+
    2024-04-20
    redis 异步加载 并发请求
  • 分析Redis缓存雪崩、击穿、穿透
    这篇文章主要介绍“分析Redis缓存雪崩、击穿、穿透”,在日常操作中,相信很多人在分析Redis缓存雪崩、击穿、穿透问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Redi...
    99+
    2024-04-02
  • SpringBoot+Redis布隆过滤器防恶意流量击穿缓存
    目录什么是恶意流量穿透怎么防布隆过滤器的另一个用武场景给Redis安装Bloom Filter在Redis里使用Bloom Filter结合SpringBoot使用搭建spring ...
    99+
    2024-04-02
  • 详解SpringCache使用Redisson分布式锁解决缓存击穿问题
    目录1 什么是缓存击穿2 为什么要使用分布式锁3 什么是Redisson4 Spring Boot集成Redisson4.1 添加maven依赖4.2 配置yml4.3 配置Redi...
    99+
    2024-04-02
  • 如何解决redis缓存穿透、缓存击穿、缓存雪崩的问题
    这篇文章主要介绍了如何解决redis缓存穿透、缓存击穿、缓存雪崩的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。缓存穿透:key中对应的...
    99+
    2024-04-02
  • Redis中缓存雪崩、缓存击穿和缓存穿透的示例分析
    这篇文章主要为大家展示了“Redis中缓存雪崩、缓存击穿和缓存穿透的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis中缓存雪崩、缓存击穿和缓存穿...
    99+
    2024-04-02
  • Spring Cache怎么使用Redisson分布式锁解决缓存击穿问题
    本篇内容主要讲解“Spring Cache怎么使用Redisson分布式锁解决缓存击穿问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Cache怎么使用Red...
    99+
    2023-06-30
  • redis中缓存穿透击穿雪崩如何解决
    这篇文章将为大家详细讲解有关redis中缓存穿透击穿雪崩如何解决,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一:前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。二:缓...
    99+
    2023-06-15
  • Redis缓存一致性、缓存穿透、缓存击穿及缓存雪崩问题分析
    本篇内容介绍了“Redis缓存一致性、缓存穿透、缓存击穿及缓存雪崩问题分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,...
    99+
    2024-04-02
  • 如何实现redis分布式缓存
    摘要: 第一:Redis 是什么? Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越...
    99+
    2024-04-02
  • SpringBoot+Redis布隆过滤器防恶意流量击穿缓存的方法
    本篇内容介绍了“SpringBoot+Redis布隆过滤器防恶意流量击穿缓存的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体如下:什...
    99+
    2023-06-29
  • 基于Redis缓存怎么实现分布式锁
    本篇内容介绍了“基于Redis缓存怎么实现分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是分布式锁首先我们先来简单了解一下什么是...
    99+
    2023-06-19
  • redis如何防止死锁
    redis防止死锁的方法:锁信息设置一定是会过期超时的,不允许一个线程长期占有一个锁。同一时刻只能有一个线程获取到锁。代码示例:long expires = System.currentTimeMillis() + expireTime;S...
    99+
    2024-04-02
  • 如何设计缓存系统:缓存穿透,缓存击穿,缓存雪崩解决方案分析
    来源:zeb_perfect前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,...
    99+
    2023-06-05
  • redis分布式缓存实现
    第一:Redis 是什么?Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API.第二:出现背景数据结构(Data Structure)需求越来越多, 但memcache...
    99+
    2023-06-03
  • 利用Redis实现分布式缓存穿透解决方案
    利用Redis实现分布式缓存穿透解决方案随着互联网业务的不断发展,数据访问量也在不断增加,为了提高系统的性能和用户体验,缓存技术逐渐成为了必不可少的一部分,其中Redis作为一种高效、可扩展的缓存中间件方案,备受开发者的青睐。在使用Redi...
    99+
    2023-11-07
    redis 分布式缓存 缓存穿透
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作