Redis为什么这么快?

90 阅读2分钟

Redis为什么这么快?

重要内容

  • 纯内存操作 Redis 将所有数据存储在内存中,读写操作直接操作内存而非磁盘,避免了传统磁盘I/O的瓶颈。内存的访问速度比磁盘快数个数量级,这使得Redis的读写吞吐量可达每秒数十万次
  • 单线程事件驱动模型
    • 避免锁竞争与上下文切换:Redis 采用单线程处理客户端请求,消除了多线程场景下的锁竞争和线程切换开销(虽然6.0版本后引入了多线程处理网络I/O,但核心命令执行仍保持单线程,确保原子性和简单性)
    • 非阻塞I/O多路复用:通过epoll/kqueue等系统调用实现多路复用,单线程可高效处理数万并发连接。事件驱动模型仅处理活跃的socket请求,减少无效等待
  • 高效的数据结构设计 Redis 提供多种高效的数据结构(如字符串、哈希、列表、集合等),这些结构经过优化,能够快速完成各种操作

扩展知识

纯内存操作

Redis 的存储是基于内存的,直接访问内存的速度是远远大于访问磁盘的速度

image-20250319125621539

单线程事件驱动模型

Redis 采用单线程处理客户端请求,消除了多线程场景下的锁竞争和线程切换开销

image-20250319214056872

高效的数据结构设计

Redis基于 C语言实现了多种高性能数据结构,例如

  • 简单动态字符串(SDS):支持二进制安全、预分配空间和惰性释放,获取字符串长度的时间复杂度为O(1)
  • 压缩列表(ziplist):连续内存存储小数据,通过变长编码节省空间,适用于小型哈希、列表等
  • 跳表(skiplist):实现有序集合(Zset),查询时间复杂度接近O(log n),且支持范围操作
  • 快速列表(quicklist):结合链表和压缩列表的优势,提升大列表操作的效率

与传统数据库的对比优势

维度Redis传统数据库(如MySQL)
存储介质内存为主,磁盘为辅磁盘为主,内存缓存有限
读写性能10万+ QPS千级QPS(依赖索引和缓存)
数据结构支持字符串、哈希、集合等丰富类型以表结构为主,类型较为固定
适用场景缓存、计数器、实时应用复杂查询、事务处理、持久化存储
扩展性水平分片、集群化简单分库分表复杂,扩展成本高