2024-05-02  阅读(39)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1434980224

Redis 采用单线程快的原因有如下几个。

1、纯内存操作

Redis 是一个内存数据库,它的数据都存储在内存中,这意味着我们读写数据都是在内存中完成,速度非常快。

同时,Redis 也是一个 KV 内存数据库,它内部构建了一个哈希表,根据指定的 key 访问时,只需要O(1) 的时间复杂度就可以找到对应的数据。

2、 I/O 多路复用

Redis 是需要处理多个客户端连接的,使用 I/O 多路复用技术。Redis 可以同时监控多个客户端连接的 I/O 状态,不需要为每个连接新建一个线程(复用),这大大减少了资源的开销。

Redis 在单线程中监听多个 Socket 请求,非阻塞IO 内部实现采用 epoll ,利用 epoll+自己实现的简单的事件框架(文件事件处理器),将客户端的读写操作都转化成了事件。利用 epoll的多路复用特性,绝不在I/O上浪费一点时间。

Redis 利用了IO多路复用技术的事件驱动模型减少了创建线程的开销,避免了多线程的上下文切换开销,这使得 Redis 能够轻松地处理大量并发连接。

3、精心设计的数据结构

Redis 设计了多种高效的数据结构,如字符串、哈希表、有序集合等。这些数据结构都被实现得非常高效,使得 Redis 能够以 O(1) 复杂度执行一些常见操作,如读取、写入、查找和删除。

还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。

这些高效的数据结构是 Redis 能够快速处理数据请求的重要原因之一。

4、单线程的优势

单线程的优势有如下几个:

  • 没有多线程上下文切换的性能损耗
  • 没有访问共享资源加锁的性能损耗
  • 模型更加简单,可维护性叫搞

5、Redis 6.0 引入多线程

我们要明白一点,Redis 的性能从来都不是 CPU,而是 I/O 和 内存。随着底层网络硬件越来越好,Redis 的性能瓶颈逐渐体现在网络 I/O 的读写上,单个线程处理网络 I/O 读写的速度跟不上底层网络硬件执行的速度。所以为了提高 Redis 的性能,在 Redis 6.0 引入多线程模型,该多线程模型只用来处理网络数据的读写和协议解析,执行读写命令的仍然是单线程。

具体参考:为什么 Redis 6.0 之后引入多线程

阅读全文
  • 点赞