基于内存存储
Redis 数据存储在内存中,读写操作直接访问内存,避免了磁盘 I/O 的瓶颈。内存访问速度比磁盘快几个数量级,这是 Redis 高性能的核心原因。
单线程模型
Redis v4.0(引入多线程进行异步任务)Redis v6.0(正式在网络模型中实现I/O多线程)
Redis 采用单线程处理命令,避免了多线程的上下文切换和锁竞争开销。通过非阻塞 I/O 多路复用机制(如 epoll、kqueue)处理大量并发连接,保证高吞吐量。
高效数据结构
Redis 内置多种优化的数据结构(如哈希表、跳表、压缩列表),针对不同场景设计,例如:
- 字符串:简单动态字符串(SDS)
- 哈希:ziplist 或 hashtable
- 有序集合:skiplist + hashtable
这些结构在时间和空间复杂度上做了平衡,能够在时间复杂度为O(1)的情况下完成大部分操作。比如在哈希表的实现中采用了链式哈希和渐进式rehash算法(减少阻塞),既能保证哈希表的性能,又能在数据量增长时进行平滑的扩展;对于整数类型的数据,会根据数据的范围选择不同的编码方式,以节省内存空间并提高访问速度。
优化的网络模型
Redis 使用 Reactor 模式处理网络请求,通过事件驱动机制(如 Linux 的 epoll)监听大量套接字,减少系统调用开销。
协议简单
RESP(Redis Serialization Protocol)协议设计简洁,解析效率高。客户端请求和服务器响应均为二进制安全格式,减少编解码开销。
持久化策略灵活
虽然持久化依赖磁盘,但通过以下方式降低影响:
- RDB:快照压缩存储,减少磁盘占用
- AOF:追加写入,支持 fsync 策略调整(如每秒同步)
其他优化
- 管道化(pipeline)批量操作减少网络往返
- 原生支持 Lua 脚本,减少多次请求的延迟
- 碎片整理和内存回收机制(jemalloc 分配器)

被折叠的 条评论
为什么被折叠?



