百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis面试核心考点总结(覆盖 90% 的 Redis 面试场景)

mhr18 2025-07-27 22:11 3 浏览 0 评论

一、基础核心

  1. 数据类型与适用场景
String:缓存、计数器(INCR)、分布式锁(SETNX)
Hash:存储对象(用户信息、商品属性)
List:消息队列(LPUSH/BRPOP)、时间线
Set:标签系统、共同关注(SINTER)
Sorted Set:排行榜(ZRANGE)、延迟队列
Stream:日志型消息队列(类似 Kafka)
HyperLogLog:基数统计(UV 统计,误差 <1%)
Bitmap:签到系统(SETBIT)、布隆过滤器
  1. 持久化机制
RDB:定时快照,恢复快但可能丢数据
AOF:日志追加,数据安全但文件大
混合模式(Redis 4.0+):RDB + AOF,兼顾速度与安全
  1. 过期策略与内存淘汰
过期策略:定期删除 + 惰性删除
淘汰策略:
1. volatile-lru/allkeys-lru(LRU 算法)
2. volatile-ttl(优先淘汰短过期)
3. volatile-random/allkeys-random
4. noeviction(不淘汰,写报错)

二、高可用与分布式

  1. 主从复制
流程:全量同步(RDB) → 增量同步(缓冲区)
问题:脑裂(旧主写入导致数据不一致)
解决方案:min-slaves-to-write(最小从节点数)
  1. 哨兵模式
功能:监控、自动故障转移、配置中心
选举流程:主观下线 → 客观下线 → Leader 选举 → 故障切换
缺陷:写能力受限、扩容复杂
  1. 集群模式
数据分片:16384 个 Slot(CRC16(key) % 16384)
节点通信:Gossip 协议
故障转移:从节点选举(类似 Raft)
扩容/缩容:reshard 迁移 Slot

三、高级特性

  1. 事务
命令:MULTI → 命令入队 → EXEC/DISCARD
注意点:不保证原子性(单命令原子,事务非回滚)
  1. Lua 脚本
原子执行、减少网络开销
避免死循环(lua-time-limit 配置)
  1. 管道
批量发送命令,减少 RTT
非原子性,需注意顺序执行
  1. 发布订阅
实时消息系统
缺陷:消息不持久化,消费者离线丢失消息

四、性能优化与问题解决

  1. 缓存问题
穿透:查询不存在的数据(布隆过滤器 + 缓存空值)
击穿:热点 key 过期(互斥锁 + 永不过期策略)
雪崩:大量 key 同时过期(随机过期时间 + 集群限流)
  1. 大 Key 与热 Key
大 Key:内存 > 1MB 或元素数 > 1000(拆分/异步删除)
热 Key:高频访问(本地缓存/分片到多节点)
  1. 慢查询优化
监控:slowlog get
避免 KEYS * , 用 SCAN 替代
复杂操作移入 Lua 脚本

五、架构设计场景题

  1. 分布式锁实现
SET lock_name random_value NX PX 30000
(NX 表示if not exist 就设置并返回True,否则不设置并返回False;PX 表示过期时间用毫秒级, 30000 表示这些毫秒时间后此key过期)
解锁 Lua 脚本保证原子性
Redlock 算法(多实例部署)
  1. 延迟队列设计
方案1:Sorted Set
方案2:Redis Stream
  1. 秒杀系统设计
Lua 脚本扣减库存(原子性)
库存预热 + 限流熔断
请求队列削峰

六、底层原理

  1. 数据结构实现
SDS(动态字符串):预分配 + 惰性删除
跳表(ZSet):平均 O(log N) 查询
压缩列表(List/Hash):小数据内存优化
QuickList(List 3.2+):链表 + 压缩列表
  1. 网络模型
单 Reactor 模式(6.0 前)
多线程网络 I/O(6.0+):主线程处理命令,I/O 线程并行读/写



高频面试真题

  1. Redis 如何保证高并发下的线程安全?
  2. 集群扩容时 Slot 迁移如何保证数据一致性?
  3. AOF 重写时新写入的数据如何处理?
  4. Redis 为什么快?单线程是否影响性能?
  5. 如何实现一个精准的排行榜(分数相同时按时间排序)?

学习建议:

  • 实践:用 Docker 搭建集群,模拟故障转移/扩容
  • 源码:阅读 dict(哈希表)、ziplist 等核心结构实现
  • 工具:redis-cli --bigkeys、redis-benchmark、RedisInsight

附:版本特性差异

Redis 6.0:多线程 I/O、ACL 权限控制

Redis 7.0:Function(函数计算)、Multi-Part AOF

Redis Stack(7.2+):集成搜索(Search)、时序(TimeSeries)等模块

掌握以上内容,可覆盖 90% 的 Redis 面试场景。理解设计思想(如 CAP 取舍、空间换时间)比死记命令更重要!

相关推荐

风险突出的高危端口汇总 一网打尽 !

高危端口一直是攻击者关注的焦点,了解这些端口的风险、攻击方式及防护策略至关重要。一、文件传输类端口1.TCP20/21:FTP服务端口FTP(文件传输协议)用于文件的上传和下载。其明文传输特性使得...

9. Redis Operator (2) —— Sentinel部署

0.简介上一篇,我们借由Redis的单机部署,学习了一下Operator的基本使用,今天,我们在此基础上,部署一下Redis的Sentinel模式。Sentinel本质上是为了解...

Spring Boot3 整合 Redis 后解决缓存穿透问题全解析

在当今互联网软件开发领域,构建高效、稳定的应用系统是每个开发者的追求。对于从事互联网软件开发的人员来说,SpringBoot和Redis都是极为常用的技术工具。当在SpringBoot3...

Spring Boot3 整合 Redis 后解决缓存雪崩问题全解析

在当今互联网软件开发领域,高并发、高性能的系统需求日益增长。对于从事互联网软件开发的人员来说,构建高效的缓存机制至关重要。SpringBoot3作为一款流行的Java框架,与Redis这一...

Sa-Token 多账号体系下Redis持久化问题

在使用Sa-Token框架实现多账号体系时,当后端服务重启后,系统报错"未能获取对应StpLogic,type=XXX"。这种情况通常发生在配置了Redis持久化存储的场景下...

外贸独立站缓存迷惑行为:你的Redis可能正在制造更多问题!

上周帮一个深圳卖家排查网站卡顿,发现他们用Redis缓存了整站HTML——"你们这是把缓存当备份用呢?"结果每次更新产品都要手动清空缓存,编辑小哥差点辞职...最近对象缓存圈两大魔教...

别再用top和htop了,这几款终端神器让你的服务器状态一目了然

当top命令成为性能瓶颈:一个深夜运维的真实困境凌晨三点,服务器告警短信突然炸响。老王盯着屏幕上top命令的黑白界面,CPU使用率飙升到90%却找不到具体进程,内存占用数据分散在不同列,磁盘I/O更是...

Redis学习笔记:管道(Pipelining)技术详解(第三章)

在掌握了Redis的基础命令后,如何进一步提升批量操作的效率?管道(Pipelining)技术是解决这一问题的关键。本章将深入解析管道的工作原理、使用场景及与其他技术的对比,帮助你在高并发场景下优化R...

Redis8.0有哪些新特性(redis最新特性)

Redis8.0引入了多项新特性和功能增强,以下是其中的一些亮点:1、数据结构:向量集合(VectorSet):这是一种新的数据类型,专为向量相似性搜索设计。它基于有序集(sortedset)...

Netty 的对象池(netty objectdecoder)

Netty是一个高性能的网络通信框架,广泛用于构建高并发、低延迟的TCP/UDP服务。为了提升性能,Netty内部大量使用了对象池(ObjectPool)技术来减少频繁创建和销毁对象带来的...

Redis学习笔记:核心命令与数据类型操作指南(第二章)

上一章我们梳理了Redis的核心应用场景与选型逻辑,本章将聚焦Redis的命令体系,从键操作到各数据类型的核心命令,帮你快速掌握Redis的"操作语法"。一、键(Key)命令:Redi...

Redis面试核心考点总结(覆盖 90% 的 Redis 面试场景)

一、基础核心数据类型与适用场景String:缓存、计数器(INCR)、分布式锁(SETNX)Hash:存储对象(用户信息、商品属性)List:消息队列(LPUSH/BRPOP)、时间线Set:标...

Redis ListPack有哪些具体应用场景?

Redis的Listpack是一种紧凑的数据结构,适用于存储少量数据。它被设计为ziplist的一种改进版本,旨在解决ziplist中存在的连锁更新问题,并提供更高效的内存使用和访问速度。以下是Lis...

SpringBoot实现单点登录(SSO)的4种方案

单点登录(SingleSign-On,SSO)是企业应用系统中常见的用户认证方案,它允许用户使用一组凭证访问多个相关但独立的系统,无需重复登录。对于拥有多个应用的企业来说,SSO可以显著提升用户体验...

刚刚,给学妹普及了登录的两大绝学

今天跟大家聊一个比较基础的话题,就是实现登录的方式有哪些?适合刚入行的朋友。华山之Session绝学Session我们称之为会话控制,是一种在服务器端保持会话状态的解决方案。通俗点来讲就是客户...

取消回复欢迎 发表评论: