Java面试题:解决Redis缓存击穿问题

缓存击穿

当一个key过期时,需要对这个key进行数据重建

在重建的时间内如果有大量的并发请求进入,就会绕过缓存进入数据库,会瞬间击垮DB

重建时间可能因为数据是多个表的混合结果需要分头统计而延长,从而更容易出现缓存击穿问题

缓存击穿的解决方案

添加互斥锁

先查询缓存,如果未命中就尝试获取互斥锁,如果成功

查询数据库进行缓存数据重建

把新数据写入缓存中

最后释放锁

添加互斥锁可以保证
同时只存在一个线程对数据库进行缓存数据重建
如果在缓存数据重建中查询的线程会进入休眠等待数据重建

请添加图片描述

性能较低,但一致性好

逻辑过期

不设置过期时间使用逻辑过期

通过过期时间字段来定义数据的过期时间

过期时间在新增和更新时进行维护

当查询缓存时,发现数据已经过期

就会通过获取互斥锁的方式对数据进行重建

但重建数据使用新线程,在新线程完成数据重建后释放锁

原本查询缓存的线程会正常返回过期数据

其他查询的线程如果获取互斥锁失败(正在重建)也会正常返回过期数据

请添加图片描述

性能较高,但不能保证一致性

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

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

相关文章

随身WiFi十大热门品牌优缺点分析!哪个品牌的随身wifi更值得买?随身wifi推荐测评!

格行随身wifi 【品牌特点】:服务好,性价比高,随身WiFi行业的“海底捞” 【优点】:专注物联网行业15年,产品和服务双驱动,综合实力和客户口碑领先 【缺点】:产品相对聚焦,产品类型…

JVM(Java虚拟机)、JMM(Java内存模型)笔记

面试常见: 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新?什么是OOM,什么是栈溢出StackOverFlowError? 怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取?怎么分析Dump文件?谈谈JVM中,类加载器你的认识…

家庭海外仓系统:做好标准化管理,小空间也能做出高收益

家庭海外仓凭借其运营模式灵活,合作成本低的独有特点,还是被很多跨境卖家所接受的。不过家庭海外仓的盈利也面临着一些问题。 首先,家庭海外仓的仓储空间有限,很难通过规模效应放大收益。家庭海外仓通常只能存储少量货物&#xf…

[leetcode hot 150]第一百零八题,将有序数组转换为二叉搜索树

题目:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树。 给定一个有序的整数数组,我们需要构建一棵平衡的二叉搜索树。平衡二叉树是指任意一个节点的左右子树的高度差不超过1。 由于给定的数组是有序的…

SpringBoot前端URL访问本地磁盘文件

SpringBoot前端通过 URL访问本地磁盘文件,其实就是 SpringBoot访问web中的静态资源的处理方式。 SpringBoot 访问web中的静态资源:https://blog.csdn.net/qq_42402854/article/details/90295079 首先,我们知道浏览器访问本地磁盘文件的方式为…

免费的维吾尔语翻译器:维汉翻译通App,最近新增了什么功能呢?让我们一起来看看!好用的维语翻译工具支持语音评分功能、支持汉语查拼音等等。

“阿拉伯语是知识,波斯语是糖,印度语是盐,而维吾尔语则是艺术。” 这是一句流传在西域的古老谚语,它不仅道出了维吾尔语言的独特魅力,也表达了人们对语言艺术的无限热爱。 而今,我们带着这份热爱&#x…

揭秘2024最新版会声会影旗舰版本功能,下载即享专业编辑

在如今这个数字化时代,视频编辑已经成为了许多人生活中不可或缺的一部分。无论是专业的影视制作人员,还是普通的短视频爱好者,都希望能够找到一款功能强大、操作简便的视频编辑软件。而今天,我要为大家介绍的这款产品——会声会影…

python中return语句的用法

一、了解函数的标准格式 def 函数名(参数1, 参数2, ...,参数n):函数体第一行代码函数体第二行代码函数体第三行代码...return 语句变量 函数名(参数1,参数2,...,参数n) python遇到return语句时,会结束整个函数调用&a…

高效数据处理的前沿:【C++】、【Redis】、【人工智能】与【大数据】的深度整合

目录 1.为什么选择 C 和 Redis? 2.人工智能与大数据的背景 1.大数据的挑战 2.人工智能的需求 3.C 与 Redis 的完美结合 1.安装 Redis 和 Redis C 客户端 2.连接 Redis 并进行数据操作 高级数据操作 列表操作 哈希操作 4.与大数据和人工智能结合 5.实际应…

Jan任意文件读取/下载和上传漏洞

自从ChatGPT横空出世以来,我一直想找一个可以自己训练的AI大模型,然而在使用Jan的过程中,数据包中传递的参数引起了我的兴趣,简单尝试后发现了任意文件读取和任意文件上传漏洞。 简介 Jan是ChatGPT的开源替代品,它在…

八、细化XML语句构建器,完善静态SQL解析

这一节主要是优化XML解析SQL部分,流程大概为: 1.XMLConfigBuilder解析配置文件,先解析数据源信息,然后再解析SQL信息,拿到mapper元素下的地址 2.XMLMapperBuilder对上面拿到的mapper地址进行处理,根据标签…

什么是 LLM 大模型训练,详解 Transformer 结构模型

1.模型/训练/推理知识介绍 深度学习领域所谓的“模型”,是一个复杂的数学公式构成的计算步骤。为了便于理解,我们以一元一次方程为例子解释: y ax b复制代码 该方程意味着给出常数 a、b 后,可以通过给出的 x 求出具体的 y。比…

风机5G智能制造工厂工业物联数字孪生平台,推进制造业数字化转型

风机5G智能制造工厂工业物联数字孪生平台,推进制造业数字化转型。在信息化、智能化的浪潮中,风机5G智能制造工厂工业物联数字孪生平台正以其独特的优势,推动制造业实现数字化转型。数字孪生平台不仅为风机制造业带来了前所未有的机遇&#xf…

【力扣刷题 动态规划】LeetCode 139 单词拆分、LeetCode 300 最长递增子序列 ✌

文章目录 1. 单词拆分2. 最长递增子序列 1. 单词拆分 题目链接 &#x1f34e; 解题思路&#xff1a; class Solution {bool dp[310] {false};public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> myset;for(auto& str :…

香橙派 AIpro 的系统评测

0. 前言 你好&#xff0c;我是悦创。 今天受邀测评 Orange Pi AIpro开发板&#xff0c;我将准备用这个测试简单的代码来看看这块开发版的性能体验。 分别从&#xff1a;Sysbench、Stress-ng、PyPerformance、RPi.GPIO Benchmark、Geekbench 等方面来测试和分析结果。 下面就…

使用Flask框架在Python中获取HTTP请求头信息

目录 引言 一、Flask框架简介 二、获取HTTP请求头的方法 三、案例分析 案例一&#xff1a;基于请求头进行用户身份验证 案例二&#xff1a;基于请求头的内容类型处理不同格式的响应 四、总结 引言 在Web开发领域&#xff0c;HTTP协议是客户端和服务器之间进行通信的基础…

Linux 内核优化:提升性能测试效率的关键步骤

大家好&#xff0c;本文介绍了如何通过优化 Linux 内核配置来提高系统性能&#xff0c;特别是在进行性能测试时。从调整文件系统、网络参数到内核参数优化&#xff0c;我们将深入探讨每个关键步骤&#xff0c;以帮助你在性能测试中取得更好的效果。 在进行性能测试时&#xff0…

OpenCV学习(4.3) 图像阈值

1.目的 在本教程中&#xff1a; 你会学到简单阈值法&#xff0c;自适应阈值法&#xff0c;以及 Otsu 阈值法(俗称大津法)等。你会学到如下函数&#xff1a;**cv.threshold&#xff0c;cv.adaptiveThreshold** 等。 2.简单阈值法 此方法是直截了当的。如果像素值大于阈值&am…

echart使用

安装方式从 npm 获取 npm install echarts 使用的页面js部分引入&#xff1a; import * as echarts from "echarts"; // 图标引入 html&#xff1a;需要带id标签的div <div class"bottom"><div id"main1"></div></di…

opencv-python(五)

opencv的颜色通道中顺序是B&#xff0c;G&#xff0c;R。 图像属性 import cv2img cv2.imread(jk.jpg) print(fshape{img.shape}) print(fsize{img.size}) print(fdtype{img.dtype}) shape&#xff1a;图像像素的行&#xff0c;列&#xff0c;通道 size&#xff1a;行数 X …