Redis相关面试题

**1 .**Redis 为什么这么快?

第一,数据存储在内存中。

所有操作都在内存完成,避免了磁盘 I/O 的延迟,读写速度极快。

第二,核心命令执行采用单线程模型。

避免了多线程的上下文切换和锁竞争,保证了高吞吐和低延迟。

(注:Redis 6.0 之后网络 I/O 支持多线程,但命令执行仍是单线程,确保原子性。)

第三,网络通信基于 I/O 多路复用(如 epoll)。

单线程可以同时监听成千上万个客户端连接,当某个 socket 有数据就绪时,内核会通知 Redis 去处理,而不是为每个连接创建线程,极大提升了并发能力。

1. 基于内存存储

  • Redis 将所有数据保存在 内存中,而 MySQL 等传统数据库主要依赖磁盘;
  • 内存的读写速度(纳秒级)远高于磁盘(毫秒级),避免了 I/O 瓶颈;
  • 虽然支持 RDB/AOF 持久化,但 读写操作始终在内存完成,持久化由后台子进程异步处理,不影响主线程性能。

2. 单线程执行命令(核心逻辑)

  • Redis 6.0 之前,命令的接收、解析、执行、响应全过程由单线程完成
  • 单线程避免了:
    • 多线程的 上下文切换开销
    • 对共享数据结构(如哈希表、跳表)的 加锁与同步成本
    • 死锁、竞态等并发问题;
  • ⚠️ 注意:Redis 并非完全单线程------持久化、异步删除等由后台线程/子进程处理;6.0+ 版本引入了多线程网络 I/O ,但命令执行仍保持单线程,确保原子性。

3. I/O 多路复用处理高并发连接

  • Redis 使用 I/O 多路复用机制 (如 Linux 的 epoll)来高效管理成千上万的客户端连接;
  • 传统阻塞 I/O 模型中,每个连接需独占一个线程,资源消耗大;
  • 而 Redis 通过 epoll 注册 socket 文件描述符的可读事件 ,当内核检测到某个连接有数据到达时,主动通知 Redis
  • Redis 单线程轮询处理所有就绪的连接,无需为每个连接创建线程,极大提升了并发能力。
相关推荐
剩下了什么4 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥5 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉5 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变5 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
山岚的运维笔记7 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里8 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科8 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦8 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
indexsunny8 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
晚霞的不甘9 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d