> 技术文档 > Redis经典面试大全(2025最新版)_redis 面试

Redis经典面试大全(2025最新版)_redis 面试


Redis经典面试大全(2025最新版)

一、Redis基础概念

1. Redis是什么?

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值数据库,支持多种数据结构,可用作数据库、缓存和消息中间件。主要特点包括:

  • 基于内存操作,读写性能极高
  • 支持持久化,可将内存数据保存到磁盘
  • 支持主从复制和高可用集群
  • 提供丰富的数据结构和操作命令

2. Redis为什么这么快?

  • 内存操作:数据存储在内存中,访问速度比磁盘快几个数量级
  • 单线程模型:避免多线程上下文切换和锁竞争
  • IO多路复用:使用epoll/kqueue等机制实现高效网络通信
  • 高效数据结构:专门优化的数据结构实现(如SDS、跳跃表等)

二、Redis数据结构与实现

1. 五种基本数据类型及使用场景

数据类型 特点 使用场景 String 二进制安全,最大512MB 缓存、计数器、分布式锁 List 双向链表,元素可重复 消息队列、最新消息排行 Hash 键值对集合 存储对象、购物车 Set 无序唯一集合 标签、共同好友 ZSet 有序集合(带分数) 排行榜、延时队列

2. 特殊数据类型

  • BitMap:二值统计(签到、在线状态)
  • HyperLogLog:基数统计(UV统计)
  • GEO:地理位置(附近的人)
  • Stream:消息流(替代Kafka)

3. 底层数据结构实现

  • String:SDS(简单动态字符串),支持动态扩容和二进制安全
  • List:3.2版本前使用ziplist或linkedlist,3.2后统一使用quicklist
  • Hash:ziplist(元素少时)或hashtable
  • Set:intset(整数集合)或hashtable
  • ZSet:ziplist或skiplist+dict组合

三、Redis持久化机制

1. RDB与AOF对比

维度 RDB AOF 原理 定时快照 记录写操作日志 性能 高(二进制压缩) 较低(文本追加) 恢复速度 快 慢(需重放命令) 数据完整性 可能丢失最后一次快照后的数据 更可靠 文件大小 小 大

2. 混合持久化(Redis 5.0+)

结合RDB和AOF优势,生成的文件前半部分是RDB格式,后半部分是AOF日志

四、Redis高可用架构

1. 主从复制

  • 作用:数据冗余、读写分离、故障恢复
  • 同步过程
    • 全量同步:从节点初次连接时,主节点生成RDB发送给从节点
    • 增量同步:主节点将写命令发送给从节点

2. 哨兵模式(Sentinel)

  • 功能:监控、自动故障转移、配置中心
  • 故障检测
    • 主观下线:单个哨兵认为节点不可用
    • 客观下线:多个哨兵确认节点不可用

3. Redis Cluster

  • 数据分片:16384个slot,每个节点负责部分slot
  • 优点:支持海量数据存储和高并发写
  • 限制:不支持跨slot事务,多key操作需使用hash tag

五、Redis缓存问题与解决方案

1. 缓存穿透

  • 现象:查询不存在的数据,绕过缓存直接访问数据库
  • 解决方案
    • 布隆过滤器拦截
    • 缓存空对象(设置短过期时间)

2. 缓存击穿

  • 现象:热点key过期瞬间,大量请求直接访问数据库
  • 解决方案
    • 互斥锁(如Redis分布式锁)
    • 热点数据永不过期

3. 缓存雪崩

  • 现象:大量key同时过期,导致请求直接访问数据库
  • 解决方案
    • 设置随机过期时间
    • 多级缓存
    • 熔断降级机制

六、Redis内存管理

1. 过期键删除策略

  • 惰性删除:访问时检查是否过期,过期则删除
  • 定期删除:定时随机检查并删除过期键

2. 内存淘汰策略

策略 描述 noeviction 内存不足时拒绝写入(默认) allkeys-lru 淘汰最近最少使用的key allkeys-random 随机淘汰key volatile-lru 淘汰设置了过期时间的LRU key volatile-ttl 淘汰即将过期的key allkeys-lfu 淘汰使用频率最低的key

七、Redis高级特性

1. 事务

  • 特点:不支持回滚,命令执行失败后继续执行后续命令
  • 命令:MULTI(开始)、EXEC(执行)、DISCARD(取消)、WATCH(监控)

2. 分布式锁

  • 实现方式:SETNX + EXPIRE
  • 注意事项
    • 设置唯一value防止误删
    • 合理设置锁超时时间
    • 使用Lua脚本保证原子性

3. 管道(Pipeline)

  • 作用:批量执行命令,减少网络往返时间
  • 限制:不保证原子性

八、Redis性能优化

1. 关键优化点

  • 合理设置maxmemory和淘汰策略
  • 使用Pipeline减少网络IO
  • 避免大key(单个key数据过大)
  • 选择合适的数据结构
  • 合理设置持久化策略

2. 大Key处理

  • 危害:阻塞请求、内存不均、网络拥塞
  • 解决方案
    • 拆分大key
    • 使用SCAN系列命令替代KEYS
    • 使用hash分片存储

九、Redis与其他技术对比

1. Redis vs Memcached

维度 Redis Memcached 数据类型 丰富(5+4种) 仅字符串 持久化 支持 不支持 集群 原生支持 需客户端实现 线程模型 单线程(6.0+多线程IO) 多线程 内存管理 复杂淘汰策略 简单LRU

十、Redis实战经验

1. 热点数据发现与预热

  • 监控key访问频率
  • 低峰期预加载热点数据
  • 使用LFU淘汰策略

2. 分布式ID生成

  • 利用Redis原子操作INCR/INCRBY
  • 结合时间戳+机器ID+序列号

3. 延迟队列

  • 使用ZSet,score为执行时间戳
  • 定时扫描到期任务

以上内容综合了Redis的核心知识点和常见面试问题,覆盖了从基础概念到高级特性的全方位内容。建议结合具体业务场景深入理解这些概念,并在实际项目中应用相关解决方案。