当前位置: 首页 > 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读取数据通常比从闪存读取要快(特…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

统计学(第8版)——统计抽样学习笔记(考试用)

一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...

linux设备重启后时间与网络时间不同步怎么解决?

linux设备重启后时间与网络时间不同步怎么解决? 设备只要一重启,时间又错了/偏了,明明刚刚对时还是对的! 这在物联网、嵌入式开发环境特别常见,尤其是开发板、树莓派、rk3588 这类设备。 解决方法: 加硬件…...

Vue.js教学第二十一章:vue实战项目二,个人博客搭建

基于 Vue 的个人博客网站搭建 摘要: 随着前端技术的不断发展,Vue 作为一种轻量级、高效的前端框架,为个人博客网站的搭建提供了极大的便利。本文详细介绍了基于 Vue 搭建个人博客网站的全过程,包括项目背景、技术选型、项目架构设计、功能模块实现、性能优化与测试等方面。…...

ubuuntu24.04 编译安装 PostgreSQL15.6+postgis 3.4.2 + pgrouting 3.6.0 +lz4

文章目录 下载基础包下载源码包编译 PG编译 postgis编译安装 pgrouting下载源码包配置编译参数编译安装 初始化数据库建表并检查列是否使用了 lz4 压缩算法检查 postgis 与 pgrouting 是否可以成功创建 下载基础包 sudo apt update && sudo apt upgrade -y sudo apt i…...