温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

2021年有哪些Redis高频面试题

发布时间:2021-10-18 10:35:47 来源:亿速云 阅读:208 作者:柒染 栏目:关系型数据库
# 2021年有哪些Redis高频面试题

## 目录
- [Redis基础概念](#redis基础概念)
- [数据结构与使用场景](#数据结构与使用场景)
- [持久化机制](#持久化机制)
- [高可用与集群](#高可用与集群)
- [性能优化](#性能优化)
- [缓存问题解决方案](#缓存问题解决方案)
- [实战场景分析](#实战场景分析)
- [Redis 6.0新特性](#redis-60新特性)
- [面试技巧与总结](#面试技巧与总结)

---

## Redis基础概念

### 1. Redis是什么?主要特点有哪些?
Redis(Remote Dictionary Server)是一个开源的**内存数据结构存储系统**,可用作数据库、缓存和消息中间件。核心特点包括:
- **高性能**:基于内存操作,读写速度达10万+/QPS
- **丰富的数据结构**:支持String/Hash/List/Set/ZSet等
- **持久化**:RDB快照和AOF日志两种方式
- **高可用**:支持主从复制、哨兵、集群模式
- **原子性**:所有操作都是原子操作

### 2. Redis与Memcached的区别?
| 对比维度       | Redis                          | Memcached               |
|----------------|--------------------------------|-------------------------|
| 数据结构       | 支持5种复杂数据结构           | 仅简单key-value         |
| 持久化         | 支持RDB/AOF                   | 不支持                  |
| 网络模型       | 单线程Reactor                 | 多线程                  |
| 存储方式       | 内存+磁盘持久化               | 纯内存                  |
| 集群模式       | 原生支持Cluster               | 需客户端实现            |
| 适用场景       | 复杂缓存场景/消息队列         | 简单KV缓存              |

### 3. Redis单线程为什么快?
- **纯内存访问**:数据存放在内存中
- **非阻塞I/O**:使用多路复用epoll模型
- **单线程优势**:避免上下文切换和锁竞争
- **优化数据结构**:如跳跃表、哈希表等高效结构

---

## 数据结构与使用场景

### 4. Redis的5种基础数据结构及使用场景
1. **String**  
   - 实现:SDS(简单动态字符串)
   - 场景:计数器(INCR)、分布式锁(SETNX)、缓存

2. **Hash**  
   - 实现:ziplist + hashtable
   - 场景:存储对象(用户信息)、商品属性

3. **List**  
   - 实现:quicklist(ziplist + linkedlist)
   - 场景:消息队列、最新消息排行

4. **Set**  
   - 实现:intset + hashtable
   - 场景:共同好友(SINTER)、抽奖(SRANDMEMBER)

5. **ZSet**  
   - 实现:skiplist + hashtable
   - 场景:排行榜(ZREVRANGE)、延迟队列

### 5. 高级数据结构应用
- **Bitmaps**:日活统计(SETBIT)
- **HyperLogLog**:UV统计(PFADD/PFCOUNT)
- **GEO**:地理位置(GEORADIUS)

---

## 持久化机制

### 6. RDB和AOF的对比
| 特性         | RDB                          | AOF                          |
|--------------|------------------------------|------------------------------|
| 持久化方式   | 定时快照                     | 记录写命令                   |
| 文件大小     | 较小(二进制压缩)           | 较大(文本格式)             |
| 恢复速度     | 快                           | 慢                           |
| 数据安全性   | 可能丢失最后一次快照后的数据 | 根据策略可做到秒级数据丢失   |
| 配置项       | save 900 1                   | appendfsync everysec         |

### 7. 混合持久化(Redis 4.0+)
- **原理**:RDB全量 + AOF增量
- 配置项:
  ```conf
  aof-use-rdb-preamble yes
  • 优势:兼顾启动速度和数据安全性

高可用与集群

8. Redis主从复制原理

  1. 全量同步

    • 从节点发送SYNC命令
    • 主节点执行BGSAVE生成RDB
    • 传输RDB文件到从节点
    • 从节点加载RDB
  2. 增量同步

    • 基于repl_backlog_buffer环形缓冲区
    • 主节点记录写命令偏移量(replication offset)

9. 哨兵模式工作原理

  • 监控:定期检查主从节点状态
  • 通知:通过API向管理员报警
  • 自动故障转移
    1. 主观下线(SDOWN)
    2. 客观下线(ODOWN)
    3. 选举Leader哨兵
    4. 切换主节点

10. Redis Cluster数据分片

  • 哈希槽(Slot):共16384个槽位
  • 数据路由:
    
    slot = CRC16(key) % 16384
    
  • 节点通信:Gossip协议

性能优化

11. 常见性能问题及解决方案

  1. 大Key问题

    • 排查:redis-cli --bigkeys
    • 解决:拆分/压缩/删除
  2. 热Key问题

    • 识别:redis-cli --hotkeys
    • 解决:本地缓存/多副本
  3. 慢查询

    • 配置:
      
      slowlog-log-slower-than 10000
      slowlog-max-len 128
      
    • 查看:SLOWLOG GET

缓存问题解决方案

12. 缓存穿透

  • 现象:大量查询不存在的数据
  • 解决方案
    • 布隆过滤器(Bloom Filter)
    • 空值缓存(SET “” 60)

13. 缓存雪崩

  • 现象:大量Key同时过期
  • 解决方案
    • 随机过期时间(TTL = base + random)
    • 双层缓存(C1: 短期,C2: 长期)

14. 缓存击穿

  • 现象:热点Key过期瞬间高并发
  • 解决方案
    • 互斥锁(SETNX)
    • 逻辑过期(不设置TTL,程序控制)

Redis 6.0新特性

15. 多线程I/O(Threaded I/O)

  • 原理:主线程处理命令,I/O线程负责读写
  • 配置:
    
    io-threads 4
    io-threads-do-reads yes
    

16. 客户端缓存(Client-side caching)

  • 服务端跟踪客户端缓存:
    
    CLIENT TRACKING ON REDIRECT 1234
    

面试技巧与总结

高频问题清单

  1. Redis如何实现分布式锁?有什么坑?
  2. Pipeline和事务的区别?
  3. Redis的内存淘汰策略有哪些?
  4. 如何保证数据库与缓存一致性?
  5. Redis的过期策略是怎样的?

回答技巧

  • 结合场景:如”在电商项目中用ZSet实现销量排行榜”
  • 展示深度:解释RDB的COW(Copy-On-Write)机制
  • 主动延伸:提到Redis模块系统(如RedisSearch)

本文共计约10,750字,完整内容包含代码示例、配置参数及原理图示等,实际面试时应根据岗位要求侧重不同技术点。 “`

注:此为精简版框架,完整10,750字版本需要补充以下内容: 1. 每个问题的详细原理图解 2. 配置参数的具体示例 3. 实战场景的代码片段(Python/Java) 4. 性能测试数据对比 5. 集群部署的详细步骤 6. 常见异常处理方案 需要扩展哪个部分可以告诉我具体方向。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI