redis学习(009 实战:黑马点评:缓存穿透、缓存雪崩 、缓存击穿)

黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目

总时长 42:48:00 共175P

此文章包含第40p-第p45的内容


文章目录

    • 缓存穿透
      • 解决方案
        • 缓存空对象
        • 布隆过滤
      • 解决方案实现
      • 缓存穿透总结
    • 缓存雪崩
      • 解决方案
    • 缓存击穿
      • 解决方案
      • 解决方案实现
        • 互斥锁代码实现
        • 逻辑过期代码实现

缓存穿透

解决方案

缓存空对象

在这里插入图片描述

布隆过滤

用hash算法存储二进制数据在布隆过滤器里
如果布隆过滤器里不存在数据库里一定不存在,
如果布隆过滤器里存在数据库里不一定存在
在这里插入图片描述

解决方案实现

在这里插入图片描述
空值的缓存时间短一点 两三分钟
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这里用shopJson != null不太容易理解 用 shopJson == “” 比较好
在这里插入图片描述

缓存穿透总结

在这里插入图片描述

缓存雪崩

解决方案

在这里插入图片描述


缓存击穿

在这里插入图片描述

解决方案

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对比
cep定理 在一致性和可用性中做选择
在这里插入图片描述

解决方案实现

在这里插入图片描述

setnx命令来实现互斥锁 只有key不存在的时候才能往里写数据
在这里插入图片描述

释放锁的时候直接删除就行 del key
在这里插入图片描述
ps:如果程序出问题了,无人再去释放这个锁了,就会产生死锁
可以设置一个有效期(如10秒)来兜底,否则可能会发生死锁问题 【有效期也不能太短(逻辑未执行完就释放了)】

互斥锁代码实现

在这里插入图片描述

加锁和释放锁代码↓
在这里插入图片描述

不要直接返回flag,容易返回null,会报空指针异常
return BooleanUtil.isTrue(flag); 相当于 return(flag != null)&& flag;
在这里插入图片描述
原来逻辑
在这里插入图片描述
在这里插入图片描述
新逻辑
在这里插入图片描述

这里使用了递归(ps:企业开发禁止写递归哦)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

模拟延时
在这里插入图片描述
使用jmeter进行并发测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

只触发了一次数据库查询
在这里插入图片描述

逻辑过期代码实现

在这里插入图片描述

两种方法 一种是将shop对象类继承RedisData
在这里插入图片描述

在这里插入图片描述

一种是组合
在这里插入图片描述
ps:组合(组合复用)优于继承,侵入性低

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

如果报空指针加上@RunWith(SpringRunner.class)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
注意:分布式可以复查,否则会有几率多次查数据库,这里就算多次重建也没影响啊,每个线程都要加锁就决定了并发量不会大。这又不像单例那样规定死了
doublecheck的意义:如果等待的线程缓存未命中,想要获取锁时,刚好缓存重建完毕,redis中已经有数据了,而且锁也被释放了,此时缓存未命中的线程就会获取到锁导致缓存再次重建

写个线程池
在这里插入图片描述
在这里插入图片描述

直接用之前的方法
在这里插入图片描述
这里测试使用20秒 实际最好设置30分钟
在这里插入图片描述
在这里插入图片描述
ps:这个锁的粒度加的有点大

这里的逻辑过期 是可以在过期之后进行重新加载 使用新的数据 ,这个值一直是存在于redis中的,只是过期之前可能使用的一直是旧数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/793752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch 更新指定字段

Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作,索引已经建过了,本文主要讲Elasticsearch更新指定字段语句,下面开始写更新语句执行更新啦! 查询数据 查…

小阿轩yx-NoSQL 之 Redis 配置与优化

小阿轩yx-NoSQL 之 Redis 配置与优化 Redis 数据库介绍 是一个非关系型数据库 关系数据库与非关系型数据库 按照数据库结构划分的 关系型数据库 是一个结构化的数据库,创建在关系模型基础上,一般面向于记录借助集合代数等数学概念和方法处理数据库…

边缘计算网关:一种高效安全的工业物联网解决方案-天拓四方

在工业物联网(IIoT)领域,数据处理和实时响应的需求日益增长,尤其是在智能制造、远程监控和预测性维护等场景中。边缘计算网关作为一种前端数据处理和决策设备,正逐渐成为满足这些需求的理想解决方案。 在一个大型制造…

音频语言学习领域数据集现状、分类及评估

Audio Language Learning (Audio-Text Learning) 是一个新兴的研究领域,专注于处理、理解和描述声音。它的发展动力是机器学习技术的进步以及越来越多地将声音与其相应的文本描述相结合的数据集的可用性。 Audio Language Models (ALMs) 是这个领域的关键技术&#…

部署大语言模型并对话

在阿里云的https://developer.aliyun.com/adc/scenario/b105013328814fe995c0f091d708d67d 选择函数计算 设置服务器配置 复制公网地址 这个地址不能直接 在返回应用,创建应用LLM 对话页面 Open WebUI 点击下面的创建应用 部署完成后访问域名 打开访问地址

欧科云链研究院:坎昆升级后,Layer2变得更好了吗?

本文由欧科云链研究院OKG Research联合PANews出品:以数据为导向,洞察真实的链上世界。 作者|Jason Jiang, OKG Research 坎昆升级后,以太坊L2的交易费用降低明显且吞吐量有所提升,但整体生态并没有迎来想象中的繁荣景…

0基础学会在亚马逊云科技AWS上利用SageMaker、PEFT和LoRA高效微调AI大语言模型(含具体教程和代码)

项目简介: 小李哥今天将继续介绍亚马逊云科技AWS云计算平台上的前沿前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS上的AI软甲开发最佳实践,并应用到自己的日常工作里。本次介绍的是如何在Amazon SageMaker上…

【漏洞复现】Splunk Enterprise for Windows 任意文件读取漏洞 CVE-2024-36991

声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 Splunk Enterprise 是一款强大的机器数据管理和分析平台,广泛应用于企业中,用于实…

应用最优化方法及MATLAB实现——第3章代码实现

一、概述 在阅读最优方法及MATLAB实现后,想着将书中提供的代码自己手敲一遍,来提高自己对书中内容理解程度,巩固一下。 这部分内容主要针对第3章的内容,将其所有代码实现均手敲一遍,中间部分代码自己根据其公式有些许的…

百度安全大模型智能体实践入选信通院“安全守卫者计划”优秀案例

7月3日,由全球数字经济大会组委会主办,中国信息通信研究院(以下简称中国信通院)与中国通信标准化协会联合承办的2024全球数字经济大会“云和软件安全论坛暨第二届SecGo云和软件安全大会”在北京召开。本届论坛聚焦云和软件安全最新…

从基础到进阶:无线局域网技术解析

在局域网刚刚问世后的一段时间内,无线局域网的发展比较缓慢,其原因是价格贵、数据传输速率低、安全性较差。但自20世纪80年代末以来,由于人们工作和生活节奏的加快,以及移动通信技术的飞速发展,无线局域网逐步进入市场…

今年2024,而那一年是1984

那一年,是1984 对于经历了改革开放洪流的国人来说,1984年似乎没有什么特别。 可是这一年,又确确实实非同寻常,许多后来的巨大变迁,在这一年埋下了伏笔…… 文学创作: 余华、莫言等作家在这一年迎来了自己的创作高峰…

学习通er图和项目思路

ER图 项目构思: 用户功能: 主要功能逻辑:

Web3知识图谱,一篇读完

这张图展示了区块链生态系统的架构和主要组件。以下是对图中内容的概括总结: 基础层: 底层基础设施:包括光纤网络、P2P网络、非对称加密、哈希算法、默克尔树和随机数生成。共识机制: PoW(工作量证明): 比特…

Elasticsearch:介绍 retrievers - 搜索一切事物

作者:来自 Elastic Jeff Vestal, Jack Conradson 在 8.14 中,Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率,以及它们如何增强你的搜索操作。 检索器是 Elasticsearc…

MyBatis框架学习笔记(三):MyBatis重要文件详解:配置文件与映射文件

1 mybatis-config.xml-配置文件详解 1.1 说明 (1)mybatis 的核心配置文件(mybatis-config.xml),比如配置 jdbc 连接信息,注册 mapper 等等都是在这个文件中进行配置,我们需要对这个配置文件有详细的了解 (2&#x…

如何做好漏洞扫描工作提高网络安全

在数字化浪潮席卷全球的今天,企业数字化转型已成为提升竞争力、实现可持续发展的关键路径。然而,这一转型过程并非坦途,其中网络安全问题如同暗礁般潜伏,稍有不慎便可能引发数据泄露、服务中断乃至品牌信誉受损等严重后果。因此&a…

【Linux】磁盘性能压测-FIO工具

一、FIO工具介绍 fio(Flexible I/O Tester)是一个用于评估计算机系统中 I/O 性能的强大工具。 官网:fio - fio - Flexible IO Tester 注意事项! 1、不要指定文件系统名称(如/dev/mapper/centos-root),避…

socket编程(2) -- TCP通信

TCP通信 2. 使用 Socket 进行TCP通信2.1 socket相关函数介绍socket()bind()listen()accept()connect()2.2 TCP协议 C/S 模型基础通信代码 最后 2. 使用 Socket 进行TCP通信 Socket通信流程图如下: 这里服务器段listen是监听socket套接字的监听文件描述符。如果客户…

Excel第30享:基于辅助列的条件求和

1、需求描述 如下图所示,现要统计2022年YTD(Year To Date:年初至今日)各个人员的“上班工时(a2)”。 下图为系统直接导出的工时数据明细样例。 2、解决思路 Step1:确定逻辑。“从日期中提取出…