为什么Redis单线程还那么快
Redis的性能非常高,每秒可以承受10W+的QPS,它的优秀性能得益于:
- 纯内存操作
- 高效的数据结构
- 使用IO多路复用技术
- 非CPU密集型任务
- 单线程的优势
纯内存操作
- Redis是一个内存数据库,它的数据都在内存中,读写数据速度在硬件上远超硬盘性数据库
- Redis是一个KV内存的数据库,内部实现的哈希表,在读写时,只需要O(1)
高效的数据结构
Redis抛弃很多C语言提供的标准数据结构,自实现了效率更高的数据结构,如list,zset
使用IO多路复用技术
Redis利用IO多路复用技术的事件驱动模型,保证在监听多个Socket连接的情况下,只针对有活动的Socket采取反应。
非CPU密集型任务
Redis作者认为,Redis是IO密集型任务居多,网络请求IO才是Redis的性能瓶颈,处理器并不是。无需多线程也能胜任工作。
单线程的优势:
- 没有多线程上下文切换的性能损耗
- 没有访问共享资源加锁的性能损耗
- 开发和调试非常友好,可维护性高
Redis单线程的缺点
单线程处理最大的缺点就是,如果前一个请求发生耗时比较久的操作,那么整个Redis就会阻塞住,其他请求也无法进来,直到这个耗时久的操作处理完成并返回,其他请求才能被处理到。