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

Redis相关面试

以下是一些在面试中关于 Redis 最常被问到的问题,涵盖了 Redis 的基础概念、数据结构、持久化、主从复制、哨兵、集群、应用场景以及常见的缓存问题等。可以根据自身实际项目经验,结合下面的要点进行深入讲解。


1. Redis 基础与特点

  1. Redis 是什么?与 Memcached 相比有什么优点?

    • Redis 是一个基于内存的高性能键值对(Key-Value)数据库;
    • 支持多种数据结构(String、List、Hash、Set、ZSet 等),功能比 Memcached 更丰富;
    • 提供持久化、发布订阅、Lua 脚本、事务等特性;
    • 官方性能测试可达 10 万级 QPS。
  2. Redis 有哪些常见应用场景?

    • 缓存热点数据,降低数据库访问压力;
    • 分布式锁;
    • 排行榜、计数器;
    • 消息队列(基于 List 实现)或发布/订阅系统;
    • 会话缓存、购物车缓存等;
    • Geo/GIS 场景(从 3.2 开始支持)。
  3. Redis 和数据库之间数据一致性如何保证?

    • 一般是最终一致性,在高并发场景下难以做到强一致;
    • 常用策略:失效时回源 DB、定期更新/失效、分布式事务协调等。
    • 面试中可以谈自己的业务实际处理方式,比如双写、延迟双删策略等。

2. Redis 数据类型与用法

  1. Redis 有哪些常见数据类型?对应的使用场景是什么?

    • String:最常用的数据结构,常作为缓存、计数器(incr、decr)。
    • Hash:存储对象的属性信息,节省内存(类似于小型数据库表)。
    • List:常用作队列、消息队列,Lpush/Rpop 实现先进后出。
    • Set:去重、交集并集等集合运算,常用于共同好友、共同关注等。
    • Sorted Set(ZSet):在 Set 的基础上增加了分数排序,可做排行榜、优先级队列。
  2. Redis 过期键删除策略有哪些?

    • 定期删除:默认每隔 100ms 随机抽取一些设置了过期时间的 key,检查并删除过期键。
    • 惰性删除:在访问 key 时,如果发现过期则删除并返回空。
    • 需要注意过期键太多时可能造成过期浪涌等性能问题,需要做好参数调优和限流。

3. Redis 持久化机制

  1. Redis 提供了哪些持久化方式?

    • RDB(Redis DataBase):将内存数据在某个时间点生成快照,保存在磁盘上;
    • AOF(Append Only File):以追加的方式记录服务器执行的写命令日志。
  2. RDB 和 AOF 的区别?各自的优缺点?

    • RDB
      • 优点:适合做备份、恢复;文件小;对性能影响较小;
      • 缺点:可能丢失最后一次快照之后的数据。
    • AOF
      • 优点:数据安全,丢数据风险更低;
      • 缺点:文件体积比 RDB 大,恢复速度相对慢,对性能有一定影响。
  3. Redis 怎么做数据恢复?

    • 先看有无可用的 AOF 文件,用 AOF 文件恢复更安全;
    • 如无 AOF 或 AOF 不可用,则使用最新的 RDB 文件恢复;
    • AOF 重写:在文件过大时会触发重写,生成新的 AOF 文件,以避免过大的日志文件影响性能。

4. Redis 主从复制与高可用

  1. Redis 主从复制原理?

    • 从库启动时向主库发送 PSYNC 命令;
    • 主库会在内存生成 RDB 并发送给从库,同步完成后再将新操作的命令流继续发送给从库;
    • 实现数据的最终一致。
  2. Redis 哨兵(Sentinel)机制?

  • 哨兵是一个独立进程,用于监控 Redis 实例的运行状态;
  • 发现主库宕机后,哨兵会自动在从库中选举新的主库并完成主从切换;
  • 在高可用架构中,哨兵一般与 Redis 实例一同部署,通过投票机制实现自动故障转移(Failover)。
  1. Redis Cluster 集群模式?
  • 将数据分片存储到多个节点,每个节点对应一部分哈希槽(hash slot),共 16384 个槽;
  • 节点之间互相通讯,通过 Gossip 协议交换元数据信息,自动发现和故障转移;
  • 避免了单点瓶颈,提供了更高的扩展性和可用性。
  1. Redis Cluster 如何实现数据分片?
  • 使用一致性哈希的思想,将 key 的 CRC16 校验值对 16384 取模,得到对应槽位,映射到指定节点;
  • 每个节点负责一部分槽位区间。

5. Redis 性能与并发

  1. Redis 的单线程模型为什么依然很快?
  • 核心数据结构操作都是在内存中进行;
  • 使用 I/O 多路复用,非阻塞事件驱动;
  • 单线程避免了线程切换和加锁开销。
  1. Redis 如何在并发场景下使用?会不会阻塞?
  • 虽然 Redis 核心处理命令是单线程,但网络 I/O 在多路复用的管理下可并行处理连接;
  • 整个命令执行队列是串行的,极大地简化了并发访问时的锁冲突问题;
  • 当命令执行耗时过长(如大操作)确实会阻塞后续命令,需要对大操作进行拆分。
  1. Redis Pipeline(管道)机制是什么?
  • 一次性发送多条命令到服务器,减少网络往返,提高吞吐量;
  • 虽然减少了 RTT(网络延迟),但不改变命令的实际执行顺序,也不保证原子性。

6. 分布式锁与其他高级特性

  1. Redis 分布式锁如何实现?
  • 最简单的方式:SET key value NX EX <expireTime>,当返回 OK 时代表获取到锁;
  • 释放锁时,需要先判断 value 是否与自身匹配;
  • 可能出现锁失效或非原子化操作问题,官方提供了 Redlock 算法来增强可靠性。
  1. Redis 事务和 Lua 脚本
  • 事务:通过 MULTIEXECWATCH 等命令实现,MULTI 命令之后所有命令会被放入队列,直到 EXEC 时一次性执行;
  • Lua 脚本:将逻辑打包成脚本在服务端原子执行,减少网络开销,并保证脚本执行的原子性。
  1. Redis 发布/订阅(Pub/Sub)如何使用?
  • 通过 PUBLISHSUBSCRIBE 命令实现消息广播;
  • 适合实时消息推送,不适合数据落盘(消息持久化),消息丢失后无法恢复。

7. 常见的缓存问题

  1. 什么是缓存穿透、缓存击穿、缓存雪崩?怎么解决?
  • 缓存穿透:访问大量不存在的数据,每次都会绕过缓存查询数据库。
    • 解决方案:布隆过滤器、空值缓存。
  • 缓存击穿:热点 key 在某个时间点失效,大量请求直击后端数据库。
    • 解决方案:设置互斥锁或提前续期热点 key。
  • 缓存雪崩:大面积 key 同一时间失效,导致系统压力骤增。
    • 解决方案:随机过期时间、分散过期;多级缓存;限流、降级措施。
  1. Redis 的淘汰策略有哪些?
  • noeviction:禁止驱逐,内存满了直接报错;
  • allkeys-lru:对所有键使用 LRU 算法进行淘汰;
  • allkeys-random:对所有键随机淘汰;
  • volatile-lru:只对设置了过期时间的键使用 LRU 淘汰;
  • volatile-random:只对设置了过期时间的键随机淘汰;
  • volatile-ttl:优先淘汰剩余生存时间(TTL)最短的键。

8. 其他常见问题

  1. Redis 的内存模型和内存管理
  • 底层采用自定义内存分配器或 libc 分配器;
  • 可以配置 maxmemory,超过后按配置的淘汰策略进行移除;
  • 注意不同数据类型对内存的占用方式,比如 Hash 可以使用 ziplist(压缩列表)优化小数据量占用空间。
  1. Redis 热点 Key 如何优化?
  • 采用拆分:对特定热点 key 进行分片;
  • 通过本地缓存多级缓存方式降低访问量;
  • 考虑使用队列、限流、锁等手段削峰。
  1. 如何监控 Redis ?
  • Redis 提供 INFO 命令可查看内存、连接、流量、持久化等指标;
  • 也可通过第三方监控系统(Prometheus + Grafana)或官方 Redis-Monitor 工具;
  • 监控命令响应时间、CPU、内存、带宽、连接数以及主从、哨兵状态等。
  1. 如何进行 Redis 的性能压测?
  • 使用官方提供的 redis-benchmark 工具;
  • 或在实际项目中以压测工具(JMeter、LoadRunner 等)模拟真实场景;
  • 主要观察 QPS、响应时间、命令耗时分布等。

总结

Redis 的面试题通常围绕原理、数据结构、持久化、主从复制/集群、缓存问题以及实际应用场景展开。面试中除了掌握理论知识点外,还需结合自身项目的实践案例,比如:

  • 在什么场景下用 Redis 做缓存,如何设计过期策略;
  • 如何处理缓存和数据库数据一致性问题;
  • 如何在高并发下保证 Redis 的稳定和高可用;
  • 如何优化大数据量操作等。

有针对性地根据面试岗位需求(如高可用、分布式锁、消息系统等方面)进行重点准备,可以在面试中更好地展现自己的能力与经验。祝面试顺利!

相关文章:

Redis相关面试

以下是一些在面试中关于 Redis 最常被问到的问题&#xff0c;涵盖了 Redis 的基础概念、数据结构、持久化、主从复制、哨兵、集群、应用场景以及常见的缓存问题等。可以根据自身实际项目经验&#xff0c;结合下面的要点进行深入讲解。 1. Redis 基础与特点 Redis 是什么&#x…...

使用强化学习训练神经网络玩俄罗斯方块

一、说明 在 2024 年暑假假期期间&#xff0c;Tim学习并应用了Q-Learning &#xff08;一种强化学习形式&#xff09;来训练神经网络玩简化版的俄罗斯方块游戏。在本文中&#xff0c;我将详细介绍我是如何做到这一点的。我希望这对任何有兴趣将强化学习应用于新领域的人有所帮助…...

java中的日期处理:只显示日期,不显示时间的两种处理方式

需要记录某个操作的操作时间&#xff0c;数据库中该字段为DATE类型&#xff1b; 插入数据的时候&#xff0c;使用数据库函数NOW()获取当前日期并插入&#xff1a; <insert id"batchInsertOrgTestersByProjectId">insert into project_org_testers(project_un…...

腾讯云AI代码助手编程挑战赛——贪吃蛇小游戏

作品介绍 贪吃蛇小游戏需要控制蛇的移动方向&#xff0c;使其吃掉地图上随机出现的食物&#xff0c;每吃掉一个食物&#xff0c;蛇的身体就会增长一格&#xff0c;是一款老少皆宜的小游戏&#xff0c;我们可以用腾讯ai助手生成全部代码&#xff0c;简单方便快捷。 技术架构 …...

水水水水水

为了拿推广卷&#xff0c;但不想把我原本完整的文章拆成零散的多篇&#xff0c;只能出此下策随便发一篇&#xff0c;认真写的都笔记专栏里 5G与未来网络 5G技术一直是近几年讨论的热点。它不仅仅是提升手机上网速度&#xff0c;更是对万物互联&#xff08;IoT&#xff09;的一次…...

Spring整合SpringMVC

目录 【pom.xml】文件&#xff1b; 新建【applicationContext.xml】文件 新建【springmvc.xml】文件&#xff1b; 配置【src/main/webapp/WEB-INF/web.xml】文件&#xff1b; 新建【com.gupaoedu.service.IUserService】&#xff1b; 新建【com.gupaoedu.service.impl.Use…...

【Rust自学】10.4. trait Pt.2:trait作为参数和返回类型、trait bound

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 说句题外话&#xff0c;写这篇的时间比写所有权还还花的久&#xff0c;trait是真的比较难理解的概念。 10.4.1. 把trait作为参数 继续以…...

嵌入式系统 (2.嵌入式硬件系统基础)

2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心&#xff0c;主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构&#xff1a;前者指令和数据共享同一存储空间…...

Linux 下 Vim 环境安装踩坑问题汇总及解决方法(重置版)

导航 安装教程导航 Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;初版&#xff09;Linux 下Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;重置版&#xff09;Windows …...

OpenAI 故障复盘 - 阿里云容器服务与可观测产品如何保障大规模 K8s 集群稳定性

本文作者&#xff1a; 容器服务团队&#xff1a;刘佳旭、冯诗淳 可观测团队&#xff1a;竺夏栋、麻嘉豪、隋吉智 一、前言 Kubernetes(K8s)架构已经是当今 IT 架构的主流与事实标准&#xff08;CNCF Survey[1]&#xff09;。随着承接的业务规模越来越大&#xff0c;用户也在使…...

安卓触摸对焦

1. 相机坐标说明 触摸对焦需要通过setFocusAreas()设置对焦区域&#xff0c;而该方法的参数的坐标&#xff0c;与屏幕坐标并不相同&#xff0c;需要做一个转换。 对Camera&#xff08;旧版相机API&#xff09;来说&#xff0c;相机的坐标区域是一个2000*2000&#xff0c;原点…...

jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法

原因 解决方法&#xff1a;更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图&#xff1a;...

20250108-实验+神经网络

实验3. 神经网络与反向传播算法 3.1 计算图&#xff1a;复合函数的计算图 实验要求1&#xff1a;基于numpy实现 ( y 1 , y 2 ) f ( x 1 , x 2 , x 3 ) (y_1,y_2) f(x_1,x_2,x_3) (y1​,y2​)f(x1​,x2​,x3​) 的反向传播算法&#xff08;不允许使用自动微分&#xff09;&a…...

【权限管理】CAS(Central Authentication Service)

CAS&#xff08;Central Authentication Service&#xff09;是一种广泛应用的 单点登录&#xff08;SSO&#xff09; 协议&#xff0c;它允许用户在一个集中式的身份验证系统中登录一次后&#xff0c;便可以无缝访问多个应用系统&#xff0c;而无需重复登录。CAS 通过统一的身…...

Golang笔记:使用net包进行TCP监听回环测试

文章目录 前言TCP监听回环代码演示 附&#xff1a;UDP监听回环 前言 TCP是比较基础常用的网络通讯方式&#xff0c;这篇文章将使用Go语言实现TCP监听回环测试。 本文中使用 Packet Sender 工具进行测试&#xff0c;其官网地址如下&#xff1a; https://packetsender.com/ TC…...

《浮岛风云》V1.0中文学习版

《浮岛风云》中文版https://pan.xunlei.com/s/VODadt0vSGdbrVOBEsW9Xx8iA1?pwdy7c3# 一款有着类似暗黑破坏神的战斗系统、类似最终幻想的奇幻世界和100%可破坏体素环境的动作冒险RPG。...

Day10——爬虫

爬虫概念 网络请求 爬虫分类 基本流程 请求头...

10. C语言 函数详解

本章目录: 前言1. C 语言函数概述1.1 函数的定义与结构1.2 函数声明1.3 函数调用 2. 函数参数传递2.1 传值调用2.2 传引用调用&#xff08;模拟&#xff09;2.3 引用调用&#xff08;C 特性&#xff09; 3. 内部函数与外部函数3.1 内部函数3.2 外部函数3.3 示例&#xff1a;多个…...

NRC优先级中比较特殊的—NRC0x13和NRC0x31

1、基础知识 大家都了解 NRC0x13&#xff0c;表示长度错误和格式错误 NRC0x31&#xff0c;表示DID不支持和数据格式不支持 2、为什么说这两个NRC比较特殊 看下图的标注部分&#xff1a; 2.1、先看NRC0x13 步骤一&#xff1a;仔细看是先判断Minmun Length Check &#xff0…...

ref() 和 reactive() 区别

ref() 和 reactive() 都是 Vue 3 中用于创建响应式数据的方法&#xff0c;但它们之间存在一些关键差异。 首先&#xff0c;ref() 用于创建响应式的标量值&#xff0c;比如数字、字符串、布尔值等基本数据类型&#xff0c;以及对象和数组等复杂数据类型。当你使用 ref() 时&…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...