当前位置: 首页 > 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() 时&…...

开源原神帧率解锁工具:突破60FPS限制的技术实现与应用指南

开源原神帧率解锁工具&#xff1a;突破60FPS限制的技术实现与应用指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神作为一款画面精美的开放世界游戏&#xff0c;其默认60FPS帧率限…...

零基础入门Speech Seaco Paraformer:一键部署中文语音识别Web界面

零基础入门Speech Seaco Paraformer&#xff1a;一键部署中文语音识别Web界面 1. 语音识别技术简介 语音识别技术&#xff08;Automatic Speech Recognition, ASR&#xff09;正在改变我们与设备交互的方式。想象一下&#xff0c;你只需要对着电脑说话&#xff0c;它就能自动…...

d2s-editor:暗黑破坏神2存档高效编辑工具全攻略

d2s-editor&#xff1a;暗黑破坏神2存档高效编辑工具全攻略 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 在《暗黑破坏神2》的冒险旅程中&#xff0c;你是否曾因错误的属性分配而懊悔不已&#xff1f;是否希望拥有更强大的装备…...

镭神智能C32激光雷达实战:从开箱到点云可视化全流程解析

1. 开箱与硬件连接 第一次拿到镭神智能C32激光雷达时&#xff0c;包装箱里会有这些关键部件&#xff1a;雷达主机、电源适配器、网线、HDMI线&#xff08;可选&#xff09;和说明书。我建议先找个宽敞的工作台&#xff0c;把所有配件摊开检查一遍&#xff0c;避免遗漏。 连接步…...

图像矢量化新纪元:Vectorizer从技术原理到实战应用

图像矢量化新纪元&#xff1a;Vectorizer从技术原理到实战应用 【免费下载链接】vectorizer Potrace based multi-colored raster to vector tracer. Inputs PNG/JPG returns SVG 项目地址: https://gitcode.com/gh_mirrors/ve/vectorizer 一、重新定义图像的数字形态&a…...

基于SpringBoot开发的预约停车系统共享停车位小程序app

在城市化进程加速的今天&#xff0c;汽车保有量以年均数百万辆的速度激增&#xff0c;而停车位建设却始终滞后。据统计&#xff0c;我国一线城市核心区域车位缺口率普遍超过50%&#xff0c;医院、景区、商圈等场景“一位难求”的现象已成为制约城市运转效率的痛点。在此背景下&…...

Qwen3-ASR-1.7B开源模型部署教程:Safetensors权重本地加载全流程

Qwen3-ASR-1.7B开源模型部署教程&#xff1a;Safetensors权重本地加载全流程 1. 引言&#xff1a;为什么选择Qwen3-ASR-1.7B 如果你正在寻找一个完全离线的语音识别解决方案&#xff0c;Qwen3-ASR-1.7B绝对值得关注。这个模型最大的优势就是"开箱即用"——不需要连…...

深入解析航顺HK32F030C8T6与STM32F030的兼容性差异及实战调优

1. 航顺HK32F030C8T6与STM32F030的硬件差异解析 第一次拿到航顺HK32F030C8T6这颗国产MCU时&#xff0c;我下意识以为它和STM32F030可以完全互换。但实际在智能家居项目中踩坑后才发现&#xff0c;两者的硬件差异远比想象中多。最明显的区别就是主频——STM32F030最高只能跑到48…...

【SAP CO】3.产品成本-4.Costing Sheet成本核算单

目录 一、 Costing Sheet成本核算单简介 二、定义Calculation Bases计算基准 三、定义Overhead Rates间接费用率 四、定义Credits贷方 五、定义Costing Sheet成本核算单 一、 Costing Sheet成本核算单简介 库房、质量控制等成本中心&#xff0c;虽然没有直接参加生产&…...

ubuntu(22.04),开启串口永久权限 ,并设置开机自启动文件

1.串口永久权限1.使用CtrlAltt 打开新的终端2. 使用 ls -la /dev 查看进行所有的驱动名称&#xff08;包含权限与用户&#xff09;ls -la /dev 3. 找到正确的名称并记住4.使用cd /etc/udev/rules.d/ 进入文件夹下&#xff0c;并使用ls查看所有的文件cd /etc/udev/rules.d/ 5. 使…...