Redis相关面试
以下是一些在面试中关于 Redis 最常被问到的问题,涵盖了 Redis 的基础概念、数据结构、持久化、主从复制、哨兵、集群、应用场景以及常见的缓存问题等。可以根据自身实际项目经验,结合下面的要点进行深入讲解。
1. Redis 基础与特点
-
Redis 是什么?与 Memcached 相比有什么优点?
- Redis 是一个基于内存的高性能键值对(Key-Value)数据库;
- 支持多种数据结构(String、List、Hash、Set、ZSet 等),功能比 Memcached 更丰富;
- 提供持久化、发布订阅、Lua 脚本、事务等特性;
- 官方性能测试可达 10 万级 QPS。
-
Redis 有哪些常见应用场景?
- 缓存热点数据,降低数据库访问压力;
- 分布式锁;
- 排行榜、计数器;
- 消息队列(基于 List 实现)或发布/订阅系统;
- 会话缓存、购物车缓存等;
- Geo/GIS 场景(从 3.2 开始支持)。
-
Redis 和数据库之间数据一致性如何保证?
- 一般是最终一致性,在高并发场景下难以做到强一致;
- 常用策略:失效时回源 DB、定期更新/失效、分布式事务协调等。
- 面试中可以谈自己的业务实际处理方式,比如双写、延迟双删策略等。
2. Redis 数据类型与用法
-
Redis 有哪些常见数据类型?对应的使用场景是什么?
- String:最常用的数据结构,常作为缓存、计数器(incr、decr)。
- Hash:存储对象的属性信息,节省内存(类似于小型数据库表)。
- List:常用作队列、消息队列,Lpush/Rpop 实现先进后出。
- Set:去重、交集并集等集合运算,常用于共同好友、共同关注等。
- Sorted Set(ZSet):在 Set 的基础上增加了分数排序,可做排行榜、优先级队列。
-
Redis 过期键删除策略有哪些?
- 定期删除:默认每隔 100ms 随机抽取一些设置了过期时间的 key,检查并删除过期键。
- 惰性删除:在访问 key 时,如果发现过期则删除并返回空。
- 需要注意过期键太多时可能造成过期浪涌等性能问题,需要做好参数调优和限流。
3. Redis 持久化机制
-
Redis 提供了哪些持久化方式?
- RDB(Redis DataBase):将内存数据在某个时间点生成快照,保存在磁盘上;
- AOF(Append Only File):以追加的方式记录服务器执行的写命令日志。
-
RDB 和 AOF 的区别?各自的优缺点?
- RDB:
- 优点:适合做备份、恢复;文件小;对性能影响较小;
- 缺点:可能丢失最后一次快照之后的数据。
- AOF:
- 优点:数据安全,丢数据风险更低;
- 缺点:文件体积比 RDB 大,恢复速度相对慢,对性能有一定影响。
- RDB:
-
Redis 怎么做数据恢复?
- 先看有无可用的 AOF 文件,用 AOF 文件恢复更安全;
- 如无 AOF 或 AOF 不可用,则使用最新的 RDB 文件恢复;
- AOF 重写:在文件过大时会触发重写,生成新的 AOF 文件,以避免过大的日志文件影响性能。
4. Redis 主从复制与高可用
-
Redis 主从复制原理?
- 从库启动时向主库发送
PSYNC命令; - 主库会在内存生成 RDB 并发送给从库,同步完成后再将新操作的命令流继续发送给从库;
- 实现数据的最终一致。
- 从库启动时向主库发送
-
Redis 哨兵(Sentinel)机制?
- 哨兵是一个独立进程,用于监控 Redis 实例的运行状态;
- 发现主库宕机后,哨兵会自动在从库中选举新的主库并完成主从切换;
- 在高可用架构中,哨兵一般与 Redis 实例一同部署,通过投票机制实现自动故障转移(Failover)。
- Redis Cluster 集群模式?
- 将数据分片存储到多个节点,每个节点对应一部分哈希槽(hash slot),共 16384 个槽;
- 节点之间互相通讯,通过 Gossip 协议交换元数据信息,自动发现和故障转移;
- 避免了单点瓶颈,提供了更高的扩展性和可用性。
- Redis Cluster 如何实现数据分片?
- 使用一致性哈希的思想,将 key 的 CRC16 校验值对 16384 取模,得到对应槽位,映射到指定节点;
- 每个节点负责一部分槽位区间。
5. Redis 性能与并发
- Redis 的单线程模型为什么依然很快?
- 核心数据结构操作都是在内存中进行;
- 使用 I/O 多路复用,非阻塞事件驱动;
- 单线程避免了线程切换和加锁开销。
- Redis 如何在并发场景下使用?会不会阻塞?
- 虽然 Redis 核心处理命令是单线程,但网络 I/O 在多路复用的管理下可并行处理连接;
- 整个命令执行队列是串行的,极大地简化了并发访问时的锁冲突问题;
- 当命令执行耗时过长(如大操作)确实会阻塞后续命令,需要对大操作进行拆分。
- Redis Pipeline(管道)机制是什么?
- 一次性发送多条命令到服务器,减少网络往返,提高吞吐量;
- 虽然减少了 RTT(网络延迟),但不改变命令的实际执行顺序,也不保证原子性。
6. 分布式锁与其他高级特性
- Redis 分布式锁如何实现?
- 最简单的方式:
SET key value NX EX <expireTime>,当返回OK时代表获取到锁; - 释放锁时,需要先判断 value 是否与自身匹配;
- 可能出现锁失效或非原子化操作问题,官方提供了 Redlock 算法来增强可靠性。
- Redis 事务和 Lua 脚本
- 事务:通过
MULTI、EXEC、WATCH等命令实现,MULTI命令之后所有命令会被放入队列,直到EXEC时一次性执行; - Lua 脚本:将逻辑打包成脚本在服务端原子执行,减少网络开销,并保证脚本执行的原子性。
- Redis 发布/订阅(Pub/Sub)如何使用?
- 通过
PUBLISH、SUBSCRIBE命令实现消息广播; - 适合实时消息推送,不适合数据落盘(消息持久化),消息丢失后无法恢复。
7. 常见的缓存问题
- 什么是缓存穿透、缓存击穿、缓存雪崩?怎么解决?
- 缓存穿透:访问大量不存在的数据,每次都会绕过缓存查询数据库。
- 解决方案:布隆过滤器、空值缓存。
- 缓存击穿:热点 key 在某个时间点失效,大量请求直击后端数据库。
- 解决方案:设置互斥锁或提前续期热点 key。
- 缓存雪崩:大面积 key 同一时间失效,导致系统压力骤增。
- 解决方案:随机过期时间、分散过期;多级缓存;限流、降级措施。
- Redis 的淘汰策略有哪些?
- noeviction:禁止驱逐,内存满了直接报错;
- allkeys-lru:对所有键使用 LRU 算法进行淘汰;
- allkeys-random:对所有键随机淘汰;
- volatile-lru:只对设置了过期时间的键使用 LRU 淘汰;
- volatile-random:只对设置了过期时间的键随机淘汰;
- volatile-ttl:优先淘汰剩余生存时间(TTL)最短的键。
8. 其他常见问题
- Redis 的内存模型和内存管理
- 底层采用自定义内存分配器或 libc 分配器;
- 可以配置
maxmemory,超过后按配置的淘汰策略进行移除; - 注意不同数据类型对内存的占用方式,比如 Hash 可以使用 ziplist(压缩列表)优化小数据量占用空间。
- Redis 热点 Key 如何优化?
- 采用拆分:对特定热点 key 进行分片;
- 通过本地缓存或多级缓存方式降低访问量;
- 考虑使用队列、限流、锁等手段削峰。
- 如何监控 Redis ?
- Redis 提供
INFO命令可查看内存、连接、流量、持久化等指标; - 也可通过第三方监控系统(Prometheus + Grafana)或官方 Redis-Monitor 工具;
- 监控命令响应时间、CPU、内存、带宽、连接数以及主从、哨兵状态等。
- 如何进行 Redis 的性能压测?
- 使用官方提供的
redis-benchmark工具; - 或在实际项目中以压测工具(JMeter、LoadRunner 等)模拟真实场景;
- 主要观察 QPS、响应时间、命令耗时分布等。
总结
Redis 的面试题通常围绕原理、数据结构、持久化、主从复制/集群、缓存问题以及实际应用场景展开。面试中除了掌握理论知识点外,还需结合自身项目的实践案例,比如:
- 在什么场景下用 Redis 做缓存,如何设计过期策略;
- 如何处理缓存和数据库数据一致性问题;
- 如何在高并发下保证 Redis 的稳定和高可用;
- 如何优化大数据量操作等。
有针对性地根据面试岗位需求(如高可用、分布式锁、消息系统等方面)进行重点准备,可以在面试中更好地展现自己的能力与经验。祝面试顺利!
相关文章:
Redis相关面试
以下是一些在面试中关于 Redis 最常被问到的问题,涵盖了 Redis 的基础概念、数据结构、持久化、主从复制、哨兵、集群、应用场景以及常见的缓存问题等。可以根据自身实际项目经验,结合下面的要点进行深入讲解。 1. Redis 基础与特点 Redis 是什么&#x…...
使用强化学习训练神经网络玩俄罗斯方块
一、说明 在 2024 年暑假假期期间,Tim学习并应用了Q-Learning (一种强化学习形式)来训练神经网络玩简化版的俄罗斯方块游戏。在本文中,我将详细介绍我是如何做到这一点的。我希望这对任何有兴趣将强化学习应用于新领域的人有所帮助…...
java中的日期处理:只显示日期,不显示时间的两种处理方式
需要记录某个操作的操作时间,数据库中该字段为DATE类型; 插入数据的时候,使用数据库函数NOW()获取当前日期并插入: <insert id"batchInsertOrgTestersByProjectId">insert into project_org_testers(project_un…...
腾讯云AI代码助手编程挑战赛——贪吃蛇小游戏
作品介绍 贪吃蛇小游戏需要控制蛇的移动方向,使其吃掉地图上随机出现的食物,每吃掉一个食物,蛇的身体就会增长一格,是一款老少皆宜的小游戏,我们可以用腾讯ai助手生成全部代码,简单方便快捷。 技术架构 …...
水水水水水
为了拿推广卷,但不想把我原本完整的文章拆成零散的多篇,只能出此下策随便发一篇,认真写的都笔记专栏里 5G与未来网络 5G技术一直是近几年讨论的热点。它不仅仅是提升手机上网速度,更是对万物互联(IoT)的一次…...
Spring整合SpringMVC
目录 【pom.xml】文件; 新建【applicationContext.xml】文件 新建【springmvc.xml】文件; 配置【src/main/webapp/WEB-INF/web.xml】文件; 新建【com.gupaoedu.service.IUserService】; 新建【com.gupaoedu.service.impl.Use…...
【Rust自学】10.4. trait Pt.2:trait作为参数和返回类型、trait bound
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 说句题外话,写这篇的时间比写所有权还还花的久,trait是真的比较难理解的概念。 10.4.1. 把trait作为参数 继续以…...
嵌入式系统 (2.嵌入式硬件系统基础)
2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间…...
Linux 下 Vim 环境安装踩坑问题汇总及解决方法(重置版)
导航 安装教程导航 Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(初版)Linux 下Mamba 及 Vim 安装问题参看本人博客:Mamba 环境安装踩坑问题汇总及解决方法(重置版)Windows …...
OpenAI 故障复盘 - 阿里云容器服务与可观测产品如何保障大规模 K8s 集群稳定性
本文作者: 容器服务团队:刘佳旭、冯诗淳 可观测团队:竺夏栋、麻嘉豪、隋吉智 一、前言 Kubernetes(K8s)架构已经是当今 IT 架构的主流与事实标准(CNCF Survey[1])。随着承接的业务规模越来越大,用户也在使…...
安卓触摸对焦
1. 相机坐标说明 触摸对焦需要通过setFocusAreas()设置对焦区域,而该方法的参数的坐标,与屏幕坐标并不相同,需要做一个转换。 对Camera(旧版相机API)来说,相机的坐标区域是一个2000*2000,原点…...
jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法
原因 解决方法:更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图:...
20250108-实验+神经网络
实验3. 神经网络与反向传播算法 3.1 计算图:复合函数的计算图 实验要求1:基于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) 的反向传播算法(不允许使用自动微分)&a…...
【权限管理】CAS(Central Authentication Service)
CAS(Central Authentication Service)是一种广泛应用的 单点登录(SSO) 协议,它允许用户在一个集中式的身份验证系统中登录一次后,便可以无缝访问多个应用系统,而无需重复登录。CAS 通过统一的身…...
Golang笔记:使用net包进行TCP监听回环测试
文章目录 前言TCP监听回环代码演示 附:UDP监听回环 前言 TCP是比较基础常用的网络通讯方式,这篇文章将使用Go语言实现TCP监听回环测试。 本文中使用 Packet Sender 工具进行测试,其官网地址如下: 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 传引用调用(模拟)2.3 引用调用(C 特性) 3. 内部函数与外部函数3.1 内部函数3.2 外部函数3.3 示例:多个…...
NRC优先级中比较特殊的—NRC0x13和NRC0x31
1、基础知识 大家都了解 NRC0x13,表示长度错误和格式错误 NRC0x31,表示DID不支持和数据格式不支持 2、为什么说这两个NRC比较特殊 看下图的标注部分: 2.1、先看NRC0x13 步骤一:仔细看是先判断Minmun Length Check ࿰…...
ref() 和 reactive() 区别
ref() 和 reactive() 都是 Vue 3 中用于创建响应式数据的方法,但它们之间存在一些关键差异。 首先,ref() 用于创建响应式的标量值,比如数字、字符串、布尔值等基本数据类型,以及对象和数组等复杂数据类型。当你使用 ref() 时&…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
