Appearance
一句话来说redis快是因为
基于内存操作+ 单线程无锁 +io多路复用+ 高效的数据结构
Redis 6.0 多线程主要用在
网络IO: 读请求、解析协议、写响应
没有用在
多线程执行redis命令
redis6.0后更准确的说法是:redis不是纯单线程,但是核心命令的执行仍然是单线程的。
为什么说CPU不是redis的瓶颈
因为在大多数普通使用场景中,redis的耗时主要不在计算,而是在网络io、数据拷贝、内存访问、慢命令、大key、持久化 这些地方。
redis大多数命令的本质都是:
找到key -- 读/写内存中的数据结构 -- 返回结果 复杂度很低
也就是说redis不是在做复杂的计算,而是在做内存数据访问。
一次redis请求的过程
客户端发送请求----网络传输--- redis从socket读取数据 --- 解析redis协议 --- 执行命令--- 生成响应 --- 写回socket -- 客户端接收响应。
什么时候CPU会变成瓶颈?
QPS 极高,大key访问,使用复杂命令