redis面试知识点

news2024/11/17 15:38:26

Redis知识点
暂时无法在飞书文档外展示此内容

  1. Redis的RDB和AOF机制各是什么?它们有什么区别?
    答:Redis提供了RDB和AOF两种数据持久化机制,适用于不同的场景。
    RDB是通过在特定的时刻对内存中的完整的数据复制快照进行持久化的。
    RDB工作原理:
  • 当执行RDB持久化时,redis会调用fork方法,创建一个子线程,子线程会将内存中数据复制到快照文件中,当快照写完之后,会替换旧的RDB文件。
  • RDB在执行持久化时,不会影响主线程对redis的操作,读和写,对用户无感。
    优点:
  • RDB文件只保存内存快照,通常用于快速灾难恢复
  • RDB文件由于是子线程来处理的,对性能影响较小
    缺点:
  • RDB文件每次保存的都是全量的内存快照,数据量大时,比较耗时,并且会有大量的IO操作。
  • 如果两次RDB之间发生故障,数据无法通过RDB快照恢复。
    AOF是通过记录操作日志的方式进行持久化的。在redis重启后,AOF文件会进行操作重放来保证数据不丢失。
    AOF工作原理:
  • 每执行一个写操作,就会在AOF文件的末尾追加一条
  • AOF文件可以根据配置进行重写,重写后可以去除一些无效的或过期的指令
  • redis提供了三种不同的AOF刷新策略,从不同步、每秒同步、每次都同步。从不同步会依赖操作系统的刷盘策略,每隔30s刷一次。三种不同的策略会影响redis操作的性能,可以根据业务需求来配置写策略。
    优点:
  • 记录比较详细,通过配置能够保证数据尽可能的不丢失或只丢失1s
    缺点:
  • AOF文件通常比RDB文件大很多,并且处理速度更慢,
  • AOF刷新速度可能会影响redis的性能。
    区别:
  • 数据安全性:AOF提供了更好的数据安全性,能够最小化数据丢失的风险。
  • 性能影响:RDB对系统性能的影响较小,尤其适用于较大的数据集。
  • 数据恢复速度:RDB可以更快地进行数据恢复,因为它是直接读取单一的数据文件。
  • 文件大小和处理速度:AOF文件在没有重写的情况下可能会变得非常大,且处理速度较慢。
    在实际应用中,根据需求,可以单独使用RDB或AOF,或者将两者结合使用,以此来平衡性能与数据安全性的需求。
  1. Redis是单线程架构吗?为什么单线程还这么快?
    redis的主线程是单线程的,主线程主要完成从请求读取、解析、键值对操作、返回结果。redis运行时也会有子进程来和其它的线程来执行主线程之外的其它的事,比如RDB快照文件生成。
    redis在6.0引入了多IO线程来处理网络请求的读和写,在多核机器上能提高网络性能。
    单线程能够有效的减少线程上下文的切换,避免了锁的开销。
    内存操作、高效的数据结构、事件驱动模型、优化的命令执行也是其性能高的原因。

  2. redis实例在运行时变慢了,该怎么办?
    看哪里有阻塞,可以从cpu、内存、磁盘、网络来排查
    在这里插入图片描述

  3. 什么是缓存雪崩、缓存击穿、缓存穿透?如何解决

  • 缓存雪崩:缓存雪崩是指在缓存层面出现大面积的缓存失效的情况,导致大量的请求直接落到数据库上,从而引起数据库性能急剧下降,甚至宕机。缓存雪崩的解决方法是在设置过期时间时加一个随机数。
  • 缓存击穿:缓存击穿指一个热点key(大量并发访问)在缓存中失效的瞬间,导致大量请求直接击穿缓存访问数据库,可能会使数据库瞬间压力剧增。缓存击穿的解决方法是将热点缓存设置为永不过期。
  • 缓存穿透:缓存穿透是指查询不存在的数据,由于缓存不命中(因为数据根本就不存在),导致所有的查询请求都落在数据库上,如果有大量这样的请求,数据库可能会遭受很大压力。缓存穿透的解决方法是缓存空的结果,即使查不到数据,也缓存一个空的结果。这样查询就会落到缓存上。或者使用布隆过滤器前缀判断数据是否在缓存中存在,如果不存在,就直接返回空的结果。相比来说缓存空的结果会更友好并且更容易实现。
    如果mysql或redis压力过大,也可以考虑前端限流的方式。
  1. 缓存一致性问题如何解决
    缓存一般情况下有两种方法去更新:
  • 先删除缓存,再更新数据库
  • 先更新数据库,再删除缓存
    无并发情况:先删除缓存,再更新数据库
    暂时无法在飞书文档外展示此内容
    缓存已经被删除了,而数据库更新失败了,如果数据库有retry机制,那么可以重试,重试失败,那么缓存中没有数据,数据库中是旧的数据,缓存与数据库是一致的。如果数据库retry成功,那么缓存与数据库也是一致的。

无并发情况:先更新数据库,再删除缓存
在这里插入图片描述

数据库更新成功,而缓存删除失败了,那么下次查询请求就会查询到旧的数据,而这是我们不希望看到的,所以删除缓存也可以加retry,一般情况下redis都会删除成功。

有并发情况:
暂时无法在飞书文档外展示此内容

会出现旧数据被其它线程读取到缓存中的情况,这样你的服务会一直读到旧数据,这种方式可以采用两种方式来处理:
A. 绑定数据库连接,对于同一个id的操作(更新、查询)都通过同一个数据库连接来处理,这样就能保证对于同一个id操作的顺序性。这种方法比较重,需要修改数据库连接池,所以了解就行。
B. 缓存延迟双删策略,如果有数据更新操作,先做一次删除缓存,过一会儿再删除一下缓存,保证并发发生时的缓存被清理掉。过一会儿这个时间就需要看业务的容忍度咯,并且并不是所有的更新操作都会有并发,只有在并发发生时才可能出现缓存旧数据的情况,所以这个概率也是比较低的。
暂时无法在飞书文档外展示此内容

会出现删除缓存之前,所有并发的请求都会读到旧值,个人感觉这种可以直接忽略了,最终等A线程删除缓存之后就会读取到新的数据了。
暂时无法在飞书文档外展示此内容

这种情况也是我们不愿意看到的,但是说实话这种情况感觉一般不会发生,正常情况下读数据比写数据会更快。当然这种情况也是可以使用缓存延迟双删策略来处理。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 机器学习 基础 之 无监督学习 【聚类(clustering)/k均值聚类/凝聚聚类/DBSCAN】的简单说明

Python 机器学习 基础 之 无监督学习 【聚类(clustering)/k均值聚类/凝聚聚类/DBSCAN】的简单说明 目录 Python 机器学习 基础 之 无监督学习 【聚类(clustering)/k均值聚类/凝聚聚类/DBSCAN】的简单说明 一、简单介绍 二、聚类…

Vue3兼容低版本浏览器(ie11,chrome63)

1、插件安装 为了使你的项目兼容 Chrome 63,你需要确保包含适当的 polyfills 和插件配置。你已经在使用 legacy 插件,但在代码中可能缺少一些配置或插件顺序有问题。以下是几个可能的改进: 安装 vitejs/plugin-legacy 插件: 确保…

Midjourney保姆级教程(五):Midjourney图生图

Midjourney生成图片的方式除了使用文字描述生成图片外,还有“图生图”的方式,可以让生成的图片更接近参考的图片。 今天我们来聊聊“图生图”的方式。 一、模仿获取propmt 很多时候,我们不知道画什么内容的图片,大家可以关注内…

一款拥有15000+POC漏洞扫描工具

1 工具介绍 0x01 免责声明 请勿使用本文中所提供的任何技术信息或代码工具进行非法测试和违法行为。若使用者利用本文中技术信息或代码工具对任何计算机系统造成的任何直接或者间接的后果及损失,均由使用者本人负责。本文所提供的技术信息或代码工具仅供于学习&am…

vue3快速上手笔记(尚硅谷)

[TOC]# 1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月&#…

经典必读:智能制造数字化工厂建设方案

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料,请球友到知识星球【智能仓储物流技术研习社】自行下载 战略背景:响应《中国制造2025》及"…

Kibana使用教程

Kibana使您能够轻松地向Elasticsearch发送请求,并以交互方式分析、可视化和管理数据。 1.安装 1.1 docker安装Kibana 如果你还没安装Elasticsearch,先执行docker安装Elasticsearch,下面是单机部署。 创建一个ES网络: docker n…

idea视图中顶部菜单栏找不到VCS

问题描述 idea视图中顶部菜单栏找不到VCS: 解决方案: 直接选择配置过git,此处操作: File->Settings->Version Control-> 点击 ->选择项目->VCS选择none ->点击apply -> 点击ok:

怎样修改库包的文件名?

python中,安装crypto模块时,会遇到crypto文件夹都是小写字母的情况,引用时又是首字母大写,这个时候,需要把库包文件名首字母改为大写字母。windows中一般的文件名命名中字母的大小写是不进行区分的,但是在p…

期权具体怎么交易详细的操作流程?

期权就是股票,唯一区别标的物上证指数,会看大盘吧,交易两个方向认购做多,认沽做空,双向t0交易,期权具体交易流程可以理解选择方向多和空,选开仓的合约,买入开仓和平仓没了&#xff0…

win10如何查看本机ip地址?三招搞定,快来试试吧

在数字化时代,IP地址作为网络设备的唯一标识,对于计算机使用者来说具有重要意义。无论是为了进行网络设置、远程连接,还是解决网络问题,了解如何查看本机IP地址都是一项必备技能。对于使用Windows 10操作系统的用户来说&#xff0…

Idea工具的使用技巧与常见问题解决方案

一、使用技巧 1、启动微服务配置 如上图,在编辑配置选项,将对应的启动入口类加进去, 增加jvm启动参数, 比如: -Denvuat 或者 -Denvuat -Dfile.encodingUTF-8 启动配置可能不是-Denvuat,这个自己看代…

媒体邀约资源报道(重庆邀约媒体)

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 重庆拥有电视台、广播电台、报纸、杂志以及网络媒体等多种丰富的媒体资源,企业和机构可以根据自身需求和活动特点选择合适的媒体进行邀约合作。以下是重庆地区的一些主要媒体…

全球十大体育赛事API服务

体育赛事API汇总: Broadage全球橄榄球赛事数据Broadage全球棒球赛事数据Broadage全球篮球实时数据Broadage全球冰球赛事数据Broadage全球排球实时数据TennisApi全球网球赛事讯息Broadage全球足球实时数据棒球数据【纳米数据】

SOLIDWORKS Toolbox根据需求灵活配置详解

用户在SOLIDWORKS中设计时,往往需要在零件中添加不同的孔特征、在装配体结构中添加不同的标准零件,Toolbox为用户提供了比较丰富的孔特征、标准零件选择,大大加快了研发工程师的设计效率;但是用户在使用Toolbox的时候仍会发现以下一些问题&am…

高熔体强度聚丙烯(HMSPP)属于高端聚丙烯 我国市场国产化进程有所加快

高熔体强度聚丙烯(HMSPP)属于高端聚丙烯 我国市场国产化进程有所加快 高熔体强度聚丙烯(HMSPP)又称高熔体强度PP,是一种含有微交联结构或长支链结构的改性聚丙烯。高熔体强度聚丙烯具有绿色环保、轻量化、结晶性好、熔…

查询一个网站的服务信息

1、网址 https://sitereport.netcraft.com/ 2、输入要查询的网站 3、点look up即可查看

扬腾创新golang2轮面试,二面相当硬核。我差点崩溃。。

一面 1、自我介绍,换工作的原因是什么? 2、物流开发平台是做什么?链路上都有哪些核心模块? 一个单下过来,分配给哪个3PL?有什么要求吗?是怎么设计的? 保证履约系统稳定性方面有做…

组建RAID后安装系统时发现无法识别硬盘!

计算环境中,RAID(独立磁盘冗余阵列)是一种广泛采用的数据存储技术,它通过组合多个物理硬盘来提升数据读写速度、增加存储容量或提供数据冗余以确保数据安全。然而,用户在使用SAS或SATA RAID阵列卡组建RAID后,可能会遇到在安装操作系统过程中硬盘无法被系统识别的问题。接…

[C#]使用C#部署yolov8的obb旋转框检测tensorrt模型

【测试通过环境】 win10 x64 vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super 版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll,TensorRtExtern源码地址:TensorRT-CShar…