【Redis】Redis为什么快?

一提到Redis,我们首先想到的就是快 ,那么它为什么快呢?从四个方面入手:
基于内存的存储模型、单线程模型、高效内置的数据结构、IO多路复用机制,下面one by one来聊

1、基于内存

快的根本原因。

  • Redis所有的数据都是存储在内存 中,内存的读写速度(纳秒级 )远快于磁盘(毫秒级)。
  • 对比传统的数据库(如MySQL),Redis避免了磁盘IO的随机读写 ,寻道时间 等巨大开销,直接操作内存数据,极大缩短了数据访问的响应时间。
  • Redis支持持久化(RDB/AOF),但是持久化是后台异步操作,不会阻塞主线程的读写请求,不影响核心性能。

2、单线程模型(避免开销)

Redis处理客户端请求的核心线程是单线程。

  • 无线程上下文切换的开销:多线程模型中,线程切换需要保存和恢复上下文,高并发下这个开销会非常大;单线程无需切换,减少了大量性能损耗。
  • 无锁竞争问题 :单线程天然保证了操作的原子性 ,不需要加互斥锁(如 synchronized 或 mutex),避免了锁竞争、死锁等问题,也省去了加锁 / 解锁的性能成本。
  • 单线程足够支持高并发 :内存操作的速度极快(微秒级),单线程每秒可以处理数十万次请求,完全能满足绝大多数场景的并发需求。
  • Redis 的单线程仅针对网络请求处理和数据操作 ,持久化(bgsave/bgrewriteaof)、集群同步、过期键删除等操作,是由独立的后台线程 完成的,不会阻塞主线程。

3、高效内置的数据结构

  • String 简单动态字符串(SDS) 预分配空间,减少内存重分配次数;二进制安全,支持任意数据
  • Hash 压缩列表 → 哈希表 数据量小时用压缩列表节省内存;数据量大时自动转为哈希表,保证 O (1) 查找
  • List 压缩列表 → 双向链表 两端插入 / 删除操作是 O (1),支持快速的lpush/rpop等操作
  • Set 整数集合 → 哈希表 元素全是整数且数量少时用整数集合;否则用哈希表,支持 O (1) 的增删查
  • Zset 压缩列表 → 跳表 数据量小时用压缩列表;数据量大时用跳表,支持 O (logN) 的插入 / 删除 / 范围查询,比红黑树更高效。

4、IO多路复用机制

Redis采用IO多路复用技术 (Linux是epoll ,BSD下是kqueue),让单线程可以高效处理数万级别的并发连接。

  • 传统阻塞IO的问题 :一个线程只能处理一个连接 ,高并发下需要创建大量线程,开销极大。
  • IO多路复用的原理 :一个线程通过 epoll 可以同时监听多个 socket 连接 ,当某个 socket 有数据可读 / 可写时,才会触发对应的事件并处理。
  • 核心优势 :单线程就可以处理大量并发连接,既避免了多线程的开销 ,又保证了高并发的处理能力。

5、还有其他细节优化:

  • 采用RESP 协议(Redis Serialization Protocol):结构简单、解析速度快,降低了网络传输和协议解析的开销。
  • 内存淘汰与回收 :支持多种内存淘汰策略 (如 volatile-lru ),自动清理不常用数据;采用惰性删除 + 定期删除的策略回收过期键,避免集中删除带来的性能波动。
  • 避免 CPU 缓存失效 :数据结构的设计尽量保证数据的连续性 ,契合 CPU 缓存的局部性原理,提升缓存命中率。
相关推荐
lusklusklusk1 分钟前
SQL Server 为什么普通 SELECT 会阻塞 UPDATE?——行级 S 锁到表级 S 锁的锁升级原理与实验验证
数据库·mysql·oracle
Leo.yuan9 分钟前
企业业务人员如何独立完成数据分析?2026年自助BI工具选型与应用指南
大数据·数据库·人工智能
roman_日积跬步-终至千里10 分钟前
数仓开发的三层责任:业务定义、模型设计与 SQL 实现
数据库·数据仓库·sql·数据建模
瀚高PG实验室12 分钟前
瀚高数据库创建新数据库卡住问题排查
数据库·postgresql·瀚高数据库
瑶总迷弟31 分钟前
银河麒麟 V10 ARM64 安装 Oracle 19c 静默部署操作手册
数据库·oracle
飞浪纪元[FWC–FE]1 小时前
Qt 工程创建与 CMake / qmake 构建规范
开发语言·数据库·qt
Ivanqhz1 小时前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节
我不会起名字3221 小时前
Redis pipeline 用了反而更慢:3 类误用与正确的批量姿势
redis·pipeline·lua·rtt·批量
Tsuki_tl1 小时前
【总结】Redis五大数据类型应用场景及基本命令
数据库·redis·后端·缓存·缓存中间件·redis命令·redis 五大数据类型
Gauss松鼠会1 小时前
GaussDB 整体架构解析
运维·服务器·网络·数据库·sql·架构·gaussdb