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

Redis高频面试题(含答案)

当然可以,Redis 是面试中非常常见的高频考点,尤其在后台开发、分布式系统、缓存设计等方向,面试官常常通过 Redis 来考察你的高并发处理能力、系统设计能力和对缓存一致性理解

以下是一些典型 Redis 的面试场景题目类型和你可以如何回答的思路:


✅ 一、基础使用类问题

1. Redis 是什么?为什么要用它?

Redis 是一个开源的基于内存的高性能键值对数据库,支持多种数据结构(String、List、Set、Hash、ZSet 等),常用于缓存、排行榜、消息队列等场景。

优点:

  • 内存存储,访问速度快(纳秒级)
  • 支持丰富的数据结构
  • 支持持久化(RDB/AOF)
  • 支持发布订阅、分布式锁等功能

2. Redis 有哪些数据类型?分别适合什么场景?
数据类型说明场景
String最基本的数据类型缓存对象、计数器
List有序链表消息队列、时间线
Set无序不重复集合标签、好友推荐、抽奖系统
Hash键值对集合存储对象(如用户信息)
ZSet有序集合(分数排序)排行榜、延迟队列

✅ 二、缓存类问题

3. Redis 缓存雪崩、穿透、击穿的区别?怎么解决?
问题原因解决方案
缓存穿透查询一个数据库和缓存都没有的数据布隆过滤器、缓存空值
缓存击穿热点数据过期瞬间大量请求打到数据库设置互斥锁、永不过期+异步刷新
缓存雪崩大量缓存同时过期设置不同过期时间、加锁限流、预热机制

4. 缓存与数据库如何保持一致性?

常用方案:

  • 延迟双删策略:
    1. 先删缓存
    2. 更新数据库
    3. 睡几毫秒,再删一次缓存(防止并发读取旧数据)
  • Binlog + 消息队列同步(复杂业务):监听数据库更新事件,同步刷新缓存
  • 强一致性要求较低时: 允许缓存短暂脏读(最终一致性)

✅ 三、并发控制与分布式锁

5. Redis 如何实现分布式锁?
  • 使用 SET key value NX PX 3000 实现互斥锁
  • 解锁时需确保是“自己加的锁”才能释放(防止误删)
  • 如果是分布式集群,推荐使用 Redlock 算法(多个 Redis 实例加锁成功才算真正加锁)

✅ 四、性能与持久化相关

6. Redis 是单线程的吗?为什么性能还这么高?
  • 是单线程的(主要指命令执行是单线程)
  • 性能高的原因:
    • 基于内存操作
    • 使用非阻塞 I/O,多路复用(epoll)
    • 数据结构简单(O(1) 操作为主)

7. Redis 的持久化机制有哪些?区别?
  • RDB(快照): 周期性保存内存数据,适合全量备份,恢复快
  • AOF(Append Only File): 每次写操作都记录日志,数据更安全,但恢复较慢
  • 混合模式(默认): Redis 7+ 支持 RDB + AOF 混合持久化,兼顾恢复速度和数据安全

✅ 五、其他高频问题

8. Redis 集群怎么实现?如何扩容?
  • 使用 Redis Cluster 实现分布式部署
  • 数据按槽位(slot)分配,共 16384 个槽位,节点间分配槽位
  • 扩容方式:添加节点,重新分配槽位即可

9. 如何实现排行榜功能?

ZSet 类型,设置分数作为排名值,如:

ZADD ranking 100 user1
ZADD ranking 200 user2
ZREVRANGE ranking 0 9 WITHSCORES

10. Redis 如何防止内存爆炸?淘汰策略有哪些?
  • 设置 maxmemory 限制最大内存
  • Redis 提供多种淘汰策略(通过 maxmemory-policy 配置):
    • noeviction:不淘汰,内存不足时报错
    • allkeys-lru:淘汰最久未使用 key
    • volatile-lru:仅淘汰设置了过期时间的 key 中最久未使用的
    • 还有 LFU、TTL、随机策略等

✅ 额外加分:项目中 Redis 的实际使用经验

你可以补充你项目中的 Redis 使用场景,比如:

  • 热门接口数据缓存(商品详情、用户信息)
  • 秒杀系统库存处理
  • 基于布隆过滤器防止缓存穿透
  • Redis + Redisson 实现分布式锁控制并发
  • 使用 Lua 脚本实现原子操作
  • 利用 Stream 做异步消息队列处理

如果你告诉我你平时项目中 Redis 主要用在哪些模块,我也可以帮你量身定制一段“项目场景 + Redis 技术点”的面试回答,贴合你实际经历更有说服力!要不要我帮你加一下?


http://www.mrgr.cn/news/98734.html

相关文章:

  • uniapp-商城-27-vuex 通用方法
  • MGR实现mysql高可用性
  • 4G/5G模组----概念+驱动+调试
  • 【八股】计算机网络
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(5):できます 完成了等 しか。。。ない 只有
  • 什么是进程?
  • 【回眸】Tessy集成测试软件使用指南(一)新手使用篇
  • 【开源项目】Excel手撕AI算法深入理解(三):时序(RNN、mamba)
  • 使用cursor进行原型图设计
  • 概念实践极速入门 - 常用的设计模式 - 简单生活例子
  • Flutter:图片在弹窗外部的UI布局
  • 一文掌握RK3568开发板Android13挂载Windows共享目录
  • vue3获取defineOptions的值;vue3获取组件实例;vue3页面获取defineOptions的name
  • 分布式热点网络
  • AI大模型学习九:‌Sealos cloud+k8s云操作系统私有化一键安装脚本部署完美教程
  • 集群搭建Weblogic服务器!
  • 《Against The Achilles’ Heel: A Survey on Red Teaming for Generative Models》全文阅读
  • 红宝书第四十七讲:Node.js服务器框架解析:Express vs Koa 完全指南
  • 前端基础之《Vue(5)—组件基础(1)》
  • Kubernetes(K8S)内部功能总结