当前位置: 首页 > news >正文

【Redis】Redis作为缓存

【Redis】Redis常见面试题(2)

在这里插入图片描述

文章目录

  • 【Redis】Redis常见面试题(2)
    • 1. 缓存
    • 2. Redis作为缓存
      • 2.1 缓存雪崩
      • 2.2 缓存穿透
      • 2.3 缓存击穿
      • 2.4 缓存雪崩、缓存穿透、缓存击穿的区别
      • 2.5 缓存预热
      • 2.6 如何保证缓存和MySQL双写一致

【Redis】Redis常见面试题(2)

1. 缓存

缓存在计算机系统中有着重要的作用,它可以显著提高系统的性能和响应速度

  1. 提升系统性能: 缓存将常用的数据或计算结果存储在高速的存储介质中,如内存,以便快速地响应请求。通过减少对慢速存储介质(如硬盘或数据库)的访问次数,可以降低响应延迟,提高系统的吞吐量和效率
  2. 减轻后端压力: 通过缓存,系统可以减少对后端资源的频繁访问,降低数据库或其他外部服务的负载。这样可以节省计算资源,提高系统的可扩展性和稳定性
  3. 改善用户体验: 缓存能够加速应用程序的响应速度,从而提供更好的用户体验。用户可以更快地获取所需的数据或结果,减少等待时间,提高用户满意度

就以我们的大脑为例

  1. 5的阶乘是120,一般不需要一直拆成5*4*3*2*1去算,而是直接答120,因为我们大脑吧5的阶乘是120保存到“缓存”了!

  2. 再比如,你是个数学白痴,四道选择题一道不会,但是你在测试之前看到了答案,答案是ABCD,你记住了,放在“缓存”里;测试的时候,你直接写答案,四道选择题满分;下次遇到同样的四道选择题,题目和选项一模一样,一些你还记得答案,但是一些忘记了,“忘记了”也就是“缓存的过期”

2. Redis作为缓存

由于Redis高性能,多种数据结构,持久化支持的特性,再加上天生支持分布式,作为分布式机的缓存,担得起这个责任~

下面是Redis作为缓存常见的一些知识点

2.1 缓存雪崩

缓存雪崩是指在短时间内,由大量缓存同时过期,导致大量的请求直接访问查询数据库而不是缓存,从而对数据库造成巨大的压力,严重的情况下可能会导致数据库宕机!

缓存的存在,减少了请求访问查询数据库的频率,提高效率,减低数据库压力,过期后,“没人兜底了”

正常情况下:

在这里插入图片描述

缓存雪崩:

在这里插入图片描述

解决:

  1. 加锁排队,缺点就是增加系统的响应时间,降低系统吞吐量,牺牲一点用户体验

  2. 随机化过期时间,极大避免了同时过期这个事件的发生,系统常用的方式;甚至可以不设置过期时间,但对硬件要求高

  3. 设计二级缓存,Redis这一层防线沦陷后,二级缓存挺身而出

    在这里插入图片描述

2.2 缓存穿透

缓存穿透指的是查询数据库和缓存都没有数据,因为数据库查询无数据,出于容错考虑,不会将结果保存到缓存中,因此每次请求都会去查询数据库,这种情况就叫做缓存穿透

  • 可以理解为每次都无视缓存,缓存一直没被存数据,缓存没有其作用

在这里插入图片描述

2.3 缓存击穿

缓存击穿指的是热点缓存,在某一时刻恰好失效了,然后此时刚好有大量的并发请求,此时这些请求将会给数据库造成巨大的压力

  • 就像被击穿了个洞,一个缺口,“流量大,水压高”形成一道强硬的“水刀”刺向数据库
  • 而缓存雪崩则是水坝直接塌了,涌了下来

相比于缓存穿透,穿的严重程度显然更高

在这里插入图片描述

解决方案:

  1. 加锁排队
  2. 设置永不过期,既然是热点缓存,它配永不过期!

2.4 缓存雪崩、缓存穿透、缓存击穿的区别

  1. 缓存穿透是因为一直没有缓存数据导致的问题

  2. 缓存击穿是因为某个热点缓存失效而导致的问题

  3. 缓存血本是因为同时又大量的缓存失效所带来的问题

2.5 缓存预热

是一个优化手段,就是应用程序启动或缓存失效之后,主动将热点数据加载到缓存中的策略

  • 这样,在实际请求到达应用程序时,热点数据已经存在于缓存中,从而减少了缓存未命中的情况,提高了应用程序的响应速度

2.6 如何保证缓存和MySQL双写一致

可以采用以下几种方法:

  1. 读取优先
    • 在读取数据时,优先从Redis缓存中读取,如果缓存中不存在,则从MySQL数据库读取,并将数据写入Redis缓存。这样可以确保读取到的数据都是最新的,避免缓存中的脏数据
  2. 更新同步
    • 在更新数据时,先更新MySQL数据库,然后再更新Redis缓存。这样可以避免数据库和缓存中的数据不一致
  3. 使用队列
    • 通过将更新操作写入队列中,然后异步地从队列中获取操作并依次执行更新操作,先更新MySQL数据库,然后再更新Redis缓存。这样可以保证更新操作的顺序一致性,并减少数据库和缓存的并发写入冲突
  4. 使用事务
    • 在支持事务的数据库中,可以使用数据库事务来同时更新MySQL和Redis。当更新MySQL数据库时,在同一个事务中也更新Redis缓存。如果更新Redis缓存失败,可以回滚数据库事务,确保数据的一致性。
  5. 定时刷新
    • 设置一个定时任务,在一定时间间隔内将MySQL数据库中的数据同步到Redis缓存中,保持数据的一致性。可以根据业务需求设置合适的刷新时间间隔

需要注意的是,以上方法会增加系统的复杂性和延迟

  • 因此需要根据具体的业务场景和性能要求做出权衡和选择
  • 另外,使用缓存和数据库作为双写一致性解决方案时,也需要考虑缓存和数据库的高可用性和容错机制,以确保整个系统的可靠性

文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆


相关文章:

【Redis】Redis作为缓存

【Redis】Redis常见面试题(2) 文章目录 【Redis】Redis常见面试题(2)1. 缓存2. Redis作为缓存2.1 缓存雪崩2.2 缓存穿透2.3 缓存击穿2.4 缓存雪崩、缓存穿透、缓存击穿的区别2.5 缓存预热2.6 如何保证缓存和MySQL双写一致 【Redis…...

IDEA(2023)解决运行乱码问题

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:无 &#x1f33c…...

零基础学前端(二)用简单案例去理解 HTML 、CSS 、JavaScript 概念

该篇适用于从零基础学习前端的小白 初学者不懂代码得含义也要坚持模仿逐行敲代码,以身体感悟带动头脑去理解新知识 一、导言 HTML,CSS,JavaScript 都是单独的语言;他们构成前端技术基础; (1)HTM…...

线性矩阵不等式(LMI)在控制理论中的应用

目录 (一)Matlab中的LMI处理工具包 (二)为什么LMI成为控制理论领域重要工具? (三)LMI在与Lyapunov不等式的关系 (1)线性矩阵不等式 (2)线性矩阵…...

如何在Python爬虫程序中使用HTTP代理?

在进行网络爬虫时,我们经常需要使用代理服务器来隐藏自己的真实IP地址,以避免被目标网站封禁或限制访问。本文将介绍如何将HTTP代理配置到Python爬虫程序中使用。 什么是HTTP代理? HTTP代理是一种网络代理,它充当客户端和服务器之…...

ARM架构指令集--专用指令

四、状态寄存器专用指令 CPSR寄存器-N Z C V T为0时 为ARM状态 F为0时 为开启FIQ状态 I为0时 为开启IRQ状态 图1 图2 一开始都是SVC指令,因为在操作系统启动的时候,在做一些初始化的操作,不允许被打断 图3 复位后CPSR寄存器为0xD3--…...

免费IP类api接口:含ip查询、ip应用场景查询、ip代理识别、IP行业查询...

免费IP类api接口:含ip查询、ip应用场景查询、ip代理识别… IP归属地-IPv6区县级:根据IP地址(IPv6版本)查询归属地信息,包含国家、省、市、区县和运营商等信息。IP归属地-IPv6城市级:根据IP地址&#xff08…...

Android Studio 中AGP ,Gradle ,JDK,SDK都是什么?

当进行 Android 开发时,以下是关键概念和工具的解释: Android Gradle Plugin: Android Gradle Plugin 是一个由 Google 提供的构建工具,它与 Gradle 配合使用来构建和打包 Android 应用。它提供了一组任务和功能,使开发…...

算法通关18关 | 回溯模板如何解决复原IP问题

18关的前几篇文章看过之后,对回溯的模板问题基本解题思路就知道了,就是固定的for循环问题,外层for循环控制横向,递归控制纵向,还要考虑撤销操作和元素是否能被重复利用问题,重复利用的情景较少,…...

Layui快速入门之第五节 导航

目录 一:基本概念 导航依赖element模块 API 渲染 属性 事件 二:水平导航 常规用法: 三:垂直导航 四:侧边垂直导航 五:导航主题 六:加入徽章等元素 七:面包屑导航 ps&a…...

使用分支——Git Checkout

这篇文章写的挺好; https://zhuanlan.zhihu.com/p/465954849 这里要注意,git 新的命令,通过 git switch 切换分支,虽然git checkout 分支 还可以用; 游离状态的HEADS 在我们已经见识到git checkout命令对于分支的三…...

【2023】数据挖掘课程设计:基于TF-IDF的文本分类

目录 一、课程设计题目 基于TF-IDF的文本分类 二、课程设计设置 1. 操作系统 2. IDE 3. python 4. 相关的库 三、课程设计目标 1. 掌握数据预处理的方法,对训练集数据进行预处理; 2. 掌握文本分类建模的方法,对语料库的文档进行建模…...

java.lang.NoSuchMethodError: java.lang.reflect.Field.trySetAccessible()Z

java.lang.NoSuchMethodError: java.lang.reflect.Field.trySetAccessible()Z 将JDK升级为11即可。 File --Project Structure – SDK Location --Gradle Setting --Gradle JDK 选择11...

如何使用SQL系列 之 如何在MySQL中使用存储过程

引言 通常,当使用关系型数据库时,你直接在应用程序代码中发出单独的结构化查询语言(SQL)查询来检索或操作数据,如SELECT、INSERT、UPDATE或DELETE。这些语句直接作用于并操作底层数据库表。如果相同的语句或一组语句中使用多个应用程序访问同…...

用 Github Codespaces 免费搭建本地开发测试环境

如何丝滑地白嫖一个本地开发环境?怎么新建一个代码空间? 1:通过Github网页新建2:通过VSCode插件新建 为代码创建相应的开发测试环境 如何丝滑地白嫖一个本地开发环境? 使用Codespaces为开发者解决这样的痛点&#xf…...

PyTorch实战-实现神经网络图像分类基础Tensor最全操作详解(一)

目录 前言 一、PyTorch数据结构-Tensor 1.什么是Tensor 2.数据Tensor使用场景 3.张量形态 标量(0D 张量) 向量(1D 张量) 矩阵(2D张量) 3D 张量与高维张量 二、Tensor的创建 1. 从列表或NumPy数组创建 2. 使用特定的初始…...

第29章_瑞萨MCU零基础入门系列教程之改进型环形缓冲区

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...

如何搭建一个react项目(详细介绍)

要搭建一个基本的 React 项目,你需要执行以下步骤。在开始之前,请确保你已经安装了 Node.js 和 npm(Node 包管理器)。 搭建一个React项目 1,创建项目目录2,初始化项目3,安装 React 和 ReactDOM4…...

ActiveMQ用法

ActiveMQ 和 JMS的关系? ActiveMQ是流行的开源消息中间件,JMS是Java平台定义的一种消息传递的标准。ActiveMQ实现了JMS规范,因此可以使用JMS API来与ActiveMQ进行交互。 JMS定义了一种标准的API。API包括了一些接口和类,用于创建…...

TouchGFX之缓存位图

位图缓存是专用RAM缓冲区,应用可将位图保存(或缓存)在其中。 如果缓存了位图,在绘制位图时,TouchGFX将自动使用RAM缓存作为像素来源。位图缓存在许多情况下十分有用。 从RAM读取数据通常比从闪存读取要快(特…...

【位运算】消失的两个数字(hard)

消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...