redis中一些面试官常问的面试题

文章目录

  • 一、Redis的持久化
    • 1、RDB和AOF持久化的区别是什么?
    • 2、RDB和AOF的优缺点?
  • 二、Redis的数据分配算法
    • 1、redis使用的是什么数据分配算法?
    • 2、虚拟槽的优点有哪些?
  • 三、Redis应用过程中出现的热门问题
    • 1、什么是缓存穿透?怎么解决?
    • 2、什么是布隆过滤器?
    • 3、什么是缓存击穿?怎么解决?
    • 4、什么是缓存雪崩?怎么解决?
  • 四、其他面试问题
    • 1、redis是单线程的,为什么还这么快?
    • 2、什么是多路I/O复用模型?


一、Redis的持久化

redis是基于内存的,内存优点是快,缺点就是容易丢失,持久化方案:一种是RDB方式,一种是AOF的方式

1、RDB和AOF持久化的区别是什么?

RDB是一个快照文件,它是将redis内存存储的数据写到磁盘上,当redis宕机时,方便从RDB的快照文件中恢复数据。
AOF的含义是追加文件,当redis操作写命令时,会将这个命令写入到AOF中,当redis宕机时,会从AOF中重新执行一遍命令恢复数据。

2、RDB和AOF的优缺点?

RDB是二进制文件,在保存时体积较小,恢复速度也比较快,但有可能丢数据,通常在项目中会使用AOF恢复数据,虽然AOF恢复数据速度慢一点,但是丢数据的风险要小很多

二、Redis的数据分配算法

1、redis使用的是什么数据分配算法?

redis使用的是虚拟槽分区算法,也叫哈希槽分区算法,redis集群中有 16384 个虚拟槽,每个key值通过CRC16校验后对16384去模来决定放在哪个槽中,集群的每个节点负责一部分的虚拟槽。

2、虚拟槽的优点有哪些?

虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有数据映射到一个固定范围的整数集合中,而且虚拟虚拟槽分区的扩展性好,方便添加和移除节点

三、Redis应用过程中出现的热门问题

1、什么是缓存穿透?怎么解决?

缓存穿透是指查询一个不存在的数据,这会导致每一次的请求都会到数据库中查询,压力过大会使数据库挂掉。这种情况大概率是遭到攻击了。
解决方案:一般会缓存空数据,或者使用布隆过滤器来解决

2、什么是布隆过滤器?

布隆过滤器主要用于检索一个元素是否在一个集合中
它的底层其实就是一块内存区域,本质就是一个数组,数组中只有0和1,进入的key值经过三次hash计算,模余数组长度得到数组的下标,并将其从0变为1,这样三个数组的位置就能确定一个key是否存在。
当然,布隆过滤器存在一定的误判,一般将误判率设置为5%,这是可以接受的

3、什么是缓存击穿?怎么解决?

缓存击穿的意思是 对于热门的key值在正需要的时候,突然失效了,导致同一时间,大量请求直逼数据库,数据库可能会在瞬间崩溃。
解决方案有三种:
1、预先设置热门数据:在redis高峰访问之前,把一些热门数据提前存入到redis里面,加大这些热门数据key的时长.
2、实时调整:现场监控哪些数据热门,实时调整key的过期时长
3、使用锁: 就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db。

4、什么是缓存雪崩?怎么解决?

缓存雪崩的意思是 针对多个key值,在同一时间,集体失效了。导致数据库的压力瞬间增大,数据库可能会在瞬间崩溃。
解决方案有三种:
1、redis中的key值,设置不同的过期时间,假如是批量设置,可以编写一个随机函数,让其在1~5分钟过期即可。
2、添加多级缓存:nginx缓存 + redis缓存 +其他缓存(ehcache等)
3、还可以使用锁或者队列的方式

四、其他面试问题

1、redis是单线程的,为什么还这么快?

有以下原因:
1、完全基于内存的,是C语言编写的
2、采用单线程,不必考虑多线程的安全问题
3、采用多路I/O复用模型,而非阻塞I/O

2、什么是多路I/O复用模型?

多路I/O复用是指利用单个线程来同时监听多个socket,并在某个socket可读、可写时得到通知,从而避免无效的等待,充分利用cpu资源

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

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

相关文章

Ubuntu22.04关闭631端口的方法

何为631端口? 631端口主要用于访问和控制网络打印服务,是linux下CUPS(Common UNIX Printing System,通用UNIX打印系统)服务的端口。Linux中的CUPS(Common UNIX Printing System,通用UNIX打印系…

VisualStudio的“应用代码更改“按钮功能

无意发现这个按钮,因为开发这么多年也没专门尝试这个按钮,于是好奇它的功能。 光标放在按钮上面提示了“应用代码更改”,于是猜想应该是在调试不断开的情况下支持热应用更改。 经过验证,功能确实如同猜想的一样,具体验…

【Elasticsearch系列廿一】ES7 SQL 新特性

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于c++实现的简易shell

代码逻辑 核心思想 解析命令行,拆解命令及其选项创建子进程,在子进程中执行命令如果是前台执行命令,则父进程就阻塞等待子进程中命令执行结束后回收子进程的资源如果是后台执行命令,则父进程不进行阻塞等待,可继续向下…

【ArcGIS微课1000例】0123:数据库中要素类批量转为shapefile

除了ArcGIS之外的其他GIS平台,想要打开ArcGIS数据库,可能无法直接打开,为了便于使用shp,建议直接将数据库中要素类批量转为shapefile。 文章目录 一、连接至数据库二、要素批量转shp一、连接至数据库 打开ArcMap,或者打开ArcCatalog,找到数据库连接,如下图: 数据库为个…

Laravel邮件发送:从配置到发邮件的指南!

Laravel邮件发送功能如何实现?怎么使用Laravel发信? Laravel作为一款流行的PHP框架,提供了强大且易用的邮件发送功能。AokSend将详细介绍如何从配置到实际发送邮件的全过程,帮助你快速掌握Laravel邮件发送的技巧。 Laravel邮件发…

数据中台!企业的必备还是可有可无?(附数据中台构建完整脑图)

数据中台!企业的必备还是可有可无?(附数据中台构建完整脑图) 前言数据中台 前言 在这个数据爆炸的时代,数据已经成为了企业最宝贵的资产之一。然而,如何有效地管理和利用这些数据,却是许多企业…

Linux驱动开发 ——架构体系

只读存储器(ROM) 1.作用 这是一种非易失性存储器,用于永久存储数据和程序。与随机存取存储器(RAM)不同,ROM中的数据在断电后不会丢失,通常用于存储固件和系统启动程序。它的内容在制造时或通过…

Blender软件三大渲染器Eevee、Cycles、Workbench对比解析

Blender 是一款强大的开源3D制作平台,提供了从建模、雕刻、动画到渲染、后期制作的一整套工具,广泛应用于电影、游戏、建筑、艺术等领域。 渲染101云渲染云渲6666 相比于其他平台,如 Autodesk Maya、3ds Max 或 Cinema 4D,Blende…

Error when custom data is added to Azure OpenAI Service Deployment

题意:在向 Azure OpenAI 服务部署添加自定义数据时出现错误。 问题背景: I receive the following error when adding my custom data which is a .txt file (it doesnt matter whether I add it via Azure Cognitive Search, Azure Blob Storage, or F…

药用植物的空间多组学:从生物合成途径到工业应用-文献精读51

Spatial multi-omics in medicinal plants: from biosynthesis pathways to industrial applications 药用植物的空间多组学:从生物合成途径到工业应用 摘要 随着分子测序和成像技术的快速发展,药用植物的多组学研究进入了单细胞时代。我们讨论了空间多…

振弦式渗压计常见故障有哪些?怎么解决?

振弦式渗压计是一种用于测量结构物或土体内部渗透水压力的仪器,广泛应用于土木工程、水利工程及环境监测领域。在使用过程中,可能会遇到一些常见的故障,以下是一些故障及其解决方法: 1. 读数不稳定: - 确保渗压计安装在…

React18入门教程

React介绍 React由Meta公司开发,是一个用于 构建Web和原生交互界面的库 React的优势 相较于传统基于DOM开发的优势 组件化的开发方式 不错的性能 相较于其它前端框架的优势 丰富的生态 跨平台支持 React的市场情况 全球最流行,大厂必备 开发环境…

2024年数学建模比赛题目及解题代码

目录 一、引言 1. 1竞赛背景介绍 1.1.1数学建模竞赛概述 1.1.2生产过程决策问题在竞赛中的重要性 1.2 解题前准备 1.2.2 工具与资源准备 1.2.3 心态调整与策略规划 二、问题理解与分析 三、模型构建与求解 3.1 模型选择与设计 3.1.1 根据问题特性选择合适的数学模型类…

线程池的执行流程和配置参数总结

一、线程池的执行流程总结 提交线程任务;如果线程池中存在空闲线程,则分配一个空闲线程给任务,执行线程任务;线程池中不存在空闲线程,则线程池会判断当前线程数是否超过核心线程数(corePoolSize&#xff09…

【超详细】基于YOLOv8训练无人机视角Visdrone2019数据集

主要内容如下: 1、Visdrone2019数据集介绍 2、下载、制作YOLO格式训练集 3、模型训练及预测 4、Onnxruntime推理 运行环境:Python3.8(要求>3.8),torch1.12.0cu113(要求>1.8)&#xff0c…

[Python]一、Python基础编程(2)

F:\BaiduNetdiskDownload\2023人工智能开发学习路线图\1、人工智能开发入门\1、零基础Python编程 1. 文件操作 把⼀些内容 ( 数据 )存储存放起来,可以让程序下⼀次执⾏的时候直接使⽤,⽽不必重新制作⼀份,省时省⼒ 。 1.1 文件的基本操作 1. 打开文件 2. 读写操作 3. 关闭…

【Go】Go语言切片(Slice)深度剖析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

[PICO VR]Unity如何往PICO VR眼镜里写持久化数据txt/json文本

前言 最近在用PICO VR做用户实验,需要将用户实验的数据记录到PICO头盔的存储空间里,记录一下整个过程 流程 1.开启写入权限 首先开启写入权限:Unity->Edit->Player->安卓小机器人->Other Settings->Configuration->Wri…

Spring的任务调度

Spring的任务调度 1.概述 Spring框架为任务调度提供了专门的解决方案。在Spring框架的org.springframework.scheduling包中,通过对JDK 的ScheduledExecutorService接口的实例进行封装,对外提供了一些注解和接口,为开发者处理定时任务提供了…