为什么单线程Redis能那么快
单线程澄清
Redis的单线程,指的是Redis的键值对读写由一个线程来完成。
Redis的多线程:
- 持久化
- 异步删除
- 集群数据同步
- 网络IO (Redis6.0引入,5.0及之前都是单线程)
单线程快的原因
内存数据库
Redis完全基于内存,大部分操作都是在内存中完成的。内存操作相比于磁盘操作,速度要快很多。
没有锁的开销
Redis采用单线程模型,避免了不必要的上下文切换和竞争条件。多线程或多进程导致的切换会消耗CPU,考虑各种锁的问题也会导致性能损耗。
I/O多路复用
Redis采用了非阻塞+epoll模型,具体ET/LT待查证。
ET是Edge Triggered的缩写,它表示边缘触发。在这种模式下,只有当某个文件描述符有数据到达时,才会触发一个事件。换句话说,当客户端发送数据到服务端时,只有第一次有数据到达时,epoll_wait会返回。即使后续还有数据到达,也不会再次触发。 LT是Level Triggered的缩写,它表示水平触发。在这种模式下,只要某个文件描述符中有数据可读,每次调用epoll_wait都会得到通知。也就是说,即使应用程序在处理事件时没有读取完所有数据,epoll_wait也会继续返回,直到所有数据都被读取完。 这两种触发模式各有优缺点。边缘触发模式的优点在于它只会在数据到达时触发事件,因此不会产生空轮询,效率更高。但是,如果应用程序需要处理大量数据,并且不能一次性读取完所有数据,边缘触发模式可能会产生大量的epoll_wait调用,增加CPU负载。而水平触发模式的优点在于它可以处理任何大小的数据,并且不会产生空轮询。但是,如果应用程序只需要处理少量的数据,并且希望减少epoll_wait调用的次数,水平触发模式可能会浪费CPU资源。
高效的数据结构
Redis常用类型有string、list、hash、zset、set,对应底层实现有简单动态字符串、双向链表、压缩列表、哈希表、跳表、整数数组。
更多信息详见Redis的底层数据结构。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义