温馨提示×

温馨提示×

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

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

redis为何这么快

发布时间:2026-09-27 20:41:14 来源:亿速云 阅读:96 作者:小樊 栏目:关系型数据库

Redis 之所以“快”,本质上是由数据结构设计、内存存储、单线程模型、IO 多路复用、以及精简的实现共同决定的。下面分层说明:


1. 基于内存(最核心原因)

  • Redis 是 内存数据库,数据主要存储在 RAM 中
  • 内存访问延迟:纳秒级(~100ns)
  • 磁盘访问延迟:毫秒级(~10ms)
  • 相比 MySQL 等磁盘数据库,速度差几个数量级

注意:Redis 也支持持久化(RDB / AOF),但读写路径不走磁盘


2. 高效的数据结构

Redis 不是简单的“key-value 字符串存储”,而是针对用途优化了底层结构:

  • SDS(简单动态字符串):O(1) 获取长度,避免 C 字符串缺陷
  • 哈希表(dict):平均 O(1) 查找
  • 跳表(skiplist):有序集合 ZSET 高效范围查询
  • 压缩列表 / 列表pack:小数据省内存、 cache 友好
  • 整数集合(intset):纯整数集合极省空间

这些结构都:

  • 尽量减少指针跳转
  • 尽量贴近 CPU cache
  • 避免复杂计算

3. 单线程模型(反而更快)

Redis 核心命令执行是单线程的:

为什么单线程还快?

  • 没有:
    • 线程切换
    • 锁竞争
    • 上下文切换开销
  • 所有操作都是:
    • 非阻塞
    • 内存操作
    • CPU 密集型极低

瓶颈通常不是 CPU,而是网络 + 内存带宽

单线程 ≠ 不能并发

  • 网络 IO 使用 epoll / kqueue / IO 多路复用
  • 一个线程可同时处理数万连接

4. IO 多路复用(高并发关键)

  • 使用 epoll(Linux)
  • 事件驱动模型
  • 单线程监听大量 socket
  • 有事件才处理,不阻塞

流程:

client → socket → epoll → Redis 单线程处理

5. 协议极简(RESP)

Redis 协议(RESP):

  • 文本协议
  • 解析极快
  • 不需要复杂序列化(对比 JSON / XML)

示例:

SET key value
GET key

解析成本远低于 HTTP + JSON


6. 避免不必要的工作

Redis 的设计哲学:

  • 不做事务回滚
  • 不强制强一致
  • 不复杂查询优化器
  • 不支持复杂 JOIN

只做一件事:极快地处理简单操作


7. 其他加速点

  • 热数据常驻内存
  • 写操作可异步落盘
  • Pipeline 减少网络往返
  • 使用 C 语言实现,贴近系统层
  • 内部对象复用,减少分配

一句话总结

Redis 快,是因为它用最简单的方式,在内存里,用单线程,干最少的事。

如果你愿意,我也可以从:

  • Redis vs Memcached
  • 为什么 Redis 6 引入多线程
  • Redis 性能瓶颈在哪里
    等角度继续讲。
向AI问一下细节

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

AI
助
手