【redis】redis经典面试题20连问

1.什么是Redis?它主要用来什么的?

  • Redis是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
  • Redis支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等,并提供多种语言的API。

2.说说Redis的基本数据结构类型

  • 字符串(String):最基本的数据类型,可以存储字符串、整数或浮点数。
  • 列表(List):有序的字符串元素集合,可以在列表的两端进行插入和删除操作。
  • 集合(Set):无序的字符串元素集合,不允许重复的元素。
  • 哈希表(Hash):键值对集合,其中键和值都是字符串。
  • 有序集合(Sorted Set):类似于集合,但每个元素都关联着一个分数,根据分数进行排序。

3.Redis为什么这么快?

  • 内存存储:Redis将数据存储在内存中,读写速度非常快。
  • 高效的数据结构:Redis采用了高效的数据结构,如哈希表、跳跃表等,优化了数据的存储和访问。
  • 简单的键值对模型:Redis的键值对模型使得数据访问更加直接和高效。
  • 原子性操作:Redis的命令是原子的,保证了数据操作的完整性。

4.什么是缓存击穿、缓存穿透、缓存雪崩?

  • 缓存击穿:指缓存中某个热点数据失效,此时有大量并发请求同时访问这个失效的数据,导致这些请求直接访问数据库,造成数据库压力过大。
  • 缓存穿透:指查询一个不存在的数据,由于缓存中没有数据,所以这个查询请求会直接穿过缓存层,到达数据库层,造成了数据库的压力。
  • 缓存雪崩:指缓存中大量的数据失效,导致大量请求直接访问数据库,造成数据库压力过大。

5.什么是热Key问题,如何解决热key问题

  • 热Key问题是指某个key的访问非常频繁,导致该key所在的Redis节点负载过高。

  • 缓存逻辑分离:将热key从常规key分离出来,使用不同的缓存策略,如单独的缓存节点或者基于内存数据库的缓存。
  • 分布式缓存:使用Redis集群或者分布式缓存系统,将热key分散到多个节点上,减轻单个节点的负载压力。
  • 数据预热:在Redis启动之前,可以通过预热机制将热key提前加载到内存中,避免冷启动时的性能问题。

6.Redis 过期策略和内存淘汰策略

  • 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。
  • 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。
  • 定期过期:Redis会定期遍历设置了过期时间的key的字典,删除到期的key。
  • 内存淘汰策略:当Redis内存不足时,会根据配置的策略淘汰一部分key,常见的策略有LRU(最近最少使用)、LFU(最近最不经常使用)、TTL(剩余时间最短)等。

7.说说Redis的常用应用场景

  • 缓存、分布式锁、发布/订阅系统、数据存储、会话存储、计数器、地理位置服务、消息队列、实时排名榜单等多种场景。

8.Redis 的持久化机制有哪些?优缺点说说

  • RDB:将当前内存中的数据库快照写入磁盘文件中,保存的是数据的一个持久化时间点状态。优点是恢复速度快,缺点是可能会丢失最后一次快照之后写入的数据。
  • AOF:以日志的形式记录每个写操作,当Redis重启时,可以通过重新执行这些写操作来恢复数据。优点是数据安全性高,缺点是恢复速度相对较慢。

9.怎么实现Redis的高可用?

  • Redis的高可用性可以通过多种方式实现,如主从复制、哨兵(Sentinel)和Redis Cluster等。
  • 主从复制可以实现数据的备份和读写分离;
  • 哨兵用于监控主从集群的运行状态,当主节点出现故障时,自动进行故障转移;
  • Redis Cluster则提供了分布式存储和水平扩展的能力,以及高可用性和数据一致性保证。

10.使用过Redis分布式锁嘛?有哪些注意点呢?

  • edis分布式锁的实现通常依赖于Redis的setnx(set if not exists)命令或RedLock算法。

  • 死锁问题:客户端可能因网络问题或其他原因无法释放锁,导致死锁。可以通过设置锁的过期时间避免死锁。
  • 锁的重入性:在有些场景中,同一个客户端可能需要多次获取同一把锁,这时需要实现锁的重入功能。
  • 锁的续期:为了避免因锁的过期时间太短而导致的锁失效问题,可以定期续期锁的过期时间。

11.使用过Redisson嘛?说说它的原理

  • Redisson是一个在Redis的基础上实现的Java驻留数据网格(In-Memory Data Grid)。它提供了许多分布式Java对象和服务,包括分布式锁、分布式集合、分布式服务和分布式执行服务。
  • Redisson的底层实现原理依赖于Redis的底层数据结构,如哈希、列表、集合等,通过封装这些数据结构来提供分布式功能。

12.什么是Redlock算法

  • Redlock算法是一种基于多个Redis实例实现的分布式锁算法。
  • 核心思想是在多个Redis实例上依次尝试加锁,当且仅当N/2+1个实例加锁成功时,才认为获取锁成功。
  • 这种算法可以在一定程度上避免单点故障问题,提高分布式锁的可靠性。

13.Redis的跳跃表

  • Redis的跳跃表(Skip List)是一种随机化的数据结构,它可以在平均时间复杂度为O(log N)的情况下完成查找、插入和删除操作。
  • 跳跃表由多层链表组成,每一层链表都包含部分节点,且层数越高包含的节点越少。
  • 通过随机化节点的层数,跳跃表可以在保证性能的同时,减少空间占用。

14.MySQL与Redis 如何保证双写一致性

  • 先写数据库,再写缓存:这种方案可能会导致脏数据问题,即数据库已更新而缓存未更新。
  • 先写缓存,再写数据库:这种方案同样存在问题,如缓存写成功而数据库写失败,导致数据不一致。
  • 延时双删策略:在写数据库之前删除缓存,写数据库之后再延时删除缓存。但这种方式在并发场景下可能存在脏数据问题。
  • 使用Canal等中间件实现数据库和缓存的双向同步。

15.为什么Redis 6.0 之后改多线程呢?

  • Redis 6.0之后引入多线程主要是为了提高I/O密集型操作的性能。
  • Redis 6.0之前的版本主要使用单线程模型来处理命令请求,虽然避免了多线程之间的上下文切换开销,但在处理I/O密集型操作时(如网络I/O),单线程模型可能会成为性能瓶颈。因此,Redis 6.0引入了多线程来处理网络I/O操作,以提高整体的吞吐量和响应速度。

16.聊聊Redis 事务机制

  • Redis的事务机制基于MULTI、EXEC、DISCARD等命令实现。
  • 事务中的所有命令都会被放入一个队列中,然后一次性、顺序性、排他性地执行。
  • Redis的事务具有原子性,即事务中的所有命令要么全部执行,要么全部不执行。
  • Redis的事务不支持回滚操作。

17.Redis的Hash 冲突怎么办

  • Redis的Hash冲突是通过哈希表(Hash Table)和链地址法(Separate Chaining)来解决的。
  • 当两个key的哈希值相同时,它们会被存储在同一个哈希桶中,并通过链表的形式进行链接。当链表长度过长时,Redis会进行rehash操作,将哈希表扩容并重新分配元素,以减少冲突和链表长度。

18.在生成 RDB期间,Redis 可以同时处理写请求么?

  • 在生成RDB快照期间,Redis可以继续处理写请求。
  • 但为了保证数据的一致性,Redis会采用写时复制(Copy-on-Write, COW)技术来避免在快照生成过程中修改原始数据。
  • 当Redis需要修改一个数据时,它不会直接修改原始数据,而是会复制一份数据的副本进行修改。
  • 在快照生成过程中,即使有其他写请求修改了数据,也不会影响到正在生成的快照文件。

19.Redis底层,使用的什么协议?

  • Redis底层使用的协议是RESP(REdis Serialization Protocol)。
  • RESP是一个简单、快速且易于实现的二进制安全协议,用于Redis客户端和服务器之间的通信。

20.布隆过滤器

  • 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用位数组和哈希函数来判断一个元素是否可能存在于一个集合中。
  • 布隆过滤器可以大大降低误报率(将不存在的元素误判为存在的概率),但无法避免漏报(将存在的元素误判为不存在的概率)。
  • 在Redis中,可以使用Lua脚本或第三方模块(如RediSearch)来实现布隆过滤器功能。

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

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

相关文章

ASP.NETMVC-简单例子-数据库查询+razor使用+项目发布

环境: win10,SQL Server 2008 R2 参考: asp.net mvc框架之EF的使用 - black娃 - 博客园 https://www.cnblogs.com/fjiqiang/p/11131365.html 目录 数据库查询要求思路操作 razor使用项目发布要求实现 数据库查询 要求 从服务器的数据库中查…

springboot 集成阿里云 OSS

引入依赖 <!-- 阿里云oss依赖 --> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.9.1</version> </dependency><?xml version"1.0" encoding"…

OWIN(.NET 开放 Web 接口)的幕后故事

在本文中&#xff0c;我们将了解 OWIN 是什么以及它的创建历史。本文将帮助那些想知道它背后的人。 我们将了解一群人如何为 .NET 社区带来宝贵的想法。同样重要的是&#xff0c;微软已经接受了 OWIN&#xff0c;而 ASP.NET Core 基本上就是建立在这个想法之上的。 简单来说&…

pppd 返回错误码 含义

错误码 00&#xff1a; pppd已经断开&#xff0c;或者已经成功建立连接后请求方又中 断了。 01&#xff1a; 发成了一个严重错误&#xff0c;例如系统调用失败或者访问非法内存。 02&#xff1a; 处理给定操作是检测到错误&#xff0c;例如使用两个互斥的操作。 03&#xff1a;…

live555的核心数据结构值之闭环双向链表

live555是采用单进程,单线程的服务器,能够同时支持多个客户端连接,并且有条不紊的进行媒体流的调度,很大一部分原因在于对数据结构的巧妙应用。 下面介绍live555核心的数据结构:闭环双向链表 什么是闭环双向链表? 描述: 一个节点保存有前一个节点的地址和后一个节点的…

2018年全国大学生数学建模竞赛A题高温服装设计(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分Matlab源代码问题11 求解h1h22 已知h1h2求解温度分布 问题21 求解第二层最佳厚度 四、完整word版论文和源代码&#xff08;两种获取方式&#xff09; 一、部分题目 2018 年高教社杯全国大学生数学建模竞赛题目 A 题 高温作业专用服…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式8275张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8275 标注数量(xml文件个数)&#xff1a;8275 标注数量(txt文件个数)&#xff1a;8275 标注…

2024年度临沂市安全文化书画摄影展开幕

人海信息网山东讯 6月27日&#xff0c;2024年度临沂市安全文化书画摄影作品展&#xff0c;在临沂高新区隆重开幕。本次书画摄影展深入贯彻“以人为本&#xff0c;安全发展”的重要思想&#xff0c;立意高远&#xff0c;内涵丰富&#xff0c;思想深邃&#xff0c;承载着健康、幸…

风机过滤机组介绍

一、定义 FFU英文全称为&#xff08;Fan Filter Unit&#xff09;&#xff0c;中文专业用语为风机过滤机组。FFU广泛应用于洁净室、洁净工作台、洁净生产线、组装式洁净室和局部百级等应用场合。 二、FFU的组成 FFU主要由四部分组成&#xff1a; 1.箱体 其材质常用镀锌铝合…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(转换、拆分、分割、连接、替换、查找、“Like“)

字符串分割&#xff0c;文末示例&#xff08;文末代码3附有源码&#xff09; 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

GPOPS-II教程(5): 月球探测器着陆最优控制问题

文章目录 问题描述GPOPS代码main functioncontinuous functionendpoint function仿真结果 最后 问题描述 参考文献&#xff1a;[1] Meditch J. On the problem of optimal thrust programming for a lunar soft landing[J]. IEEE Transactions on Automatic Control, 1964, 9(4…

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议&#xff1a;软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…

怎么打印加密的Excel文件,有哪些方法?

很多小伙伴都喜欢使用Excel来创建或是编辑表格文档&#xff0c;因为Excel中的功能十分的丰富且强大&#xff0c;在Excel中我们可以对表格文档进行各种操作。有的小伙伴可能在打印时需要给每一页表格添加页码&#xff0c;但又不知道该在哪里找到相关操作&#xff0c;其实很简单&…

FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外&#xff0c;还有于2017年推出的SRT协议&#xff0c;相比常见的RTMP协议&#xff0c;SRT协议具有更低的延迟&#xff0c;并且消…

干货分享 | 学会这7个工具方法,数字化转型规划不是难题

提到数字化转型&#xff0c;首要做的便是分析企业现有的业务流程和价值流&#xff0c;发现企业利润来源的关键点&#xff0c;进而有针对性的数字化转型。要实现传统业务向数字化业务的转变&#xff0c;制定出高效、灵活的业务流程优化策略显得至关重要&#xff0c;这样才能找到…

Modbus为何要转成EtherCAT

1. Modbus是什么&#xff1f; Modbus是一种工业通信协议&#xff0c;广泛应用于工业自动化领域。它支持多种通信方式&#xff0c;包括RS-232、RS-485和TCP/IP等。Modbus协议简单易用&#xff0c;能够实现设备之间的数据交换和控制命令的传输。然而&#xff0c;它在数据传输速率…

Web渗透:任意文件下载

任意文件下载漏洞&#xff08;Arbitrary File Download Vulnerability&#xff09;是一种常见的Web安全漏洞&#xff0c;它允许攻击者通过修改输入参数&#xff0c;从服务器下载任意文件&#xff0c;而不仅仅是预期的文件&#xff1b;通常这种漏洞出现在处理用户输入的地方&…

一款开源、免费、现代化风格的WPF UI控件库

前言 今天大姚给大家分享一款开源&#xff08;MIT License&#xff09;、免费、现代化风格的WPF UI控件库&#xff1a;ModernWpf。 项目介绍 ModernWpf是一个开源项目&#xff0c;它为 WPF 提供了一组现代化的控件和主题&#xff0c;使开发人员能够创建具有现代外观的桌面应…

优化 C# 和 .NET Core Web API 中的 LINQ 查询

LINQ&#xff08;语言集成查询&#xff09;是 C# 中的一项强大功能&#xff0c;允许开发人员以可读且简洁的方式查询和操作数据。但是&#xff0c;LINQ 的使用效率低下可能会导致性能瓶颈&#xff0c;尤其是在处理 .NET Core Web API 中的大型数据集时。优化 LINQ 查询对于维护…

Rust 程序设计语言学习——泛型、Trait和生命周期

每一种编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是泛型。泛型是具体类型或其他属性的抽象替代。 Trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 Trait 以一种抽象的方式定义共同行为。可以使用 trait bounds 指定泛型是任何拥有特定行为…