• Redis单线程设计的,但为什么这么快


    1、为什么是单线程设计?

     对于 redis 来说单线程的设计能够保证性能,多线程在设计和实现上会带来更多的复杂度。但是使用单线程的方式确实无法很好发挥多核 CPU 的性能,可以通过在单机开多个 Redis 实例来完善。

    2. 从Redis的性能方面分析

    Redis的性能非常之高,每秒可以承受10W+的QPS,主要取决于以下几个方面:

    • Redis大部分操作在内存完成
    • 采用IO多路复用机制
    • 非CPU密集型任务
    • 单线程的优势

    纯内存操作

    Redis 是基于内存的数据库,那不可避免的就要与磁盘数据库做对比。对于磁盘数据库来说,是需要将数据读取到内存里的,这个过程会受到磁盘 I/O 的限制。

    而对于内存数据库来说,本身数据就存在于内存里,也就没有了这方面的开销。

    采用IO多路复用机制

    • I/O :网络 I/O
    • 多路:多个 TCP 连接
    • 复用:共用一个线程或进程

    生产环境中的使用,通常是多个客户端连接 Redis,然后各自发送命令至 Redis 服务器,最后服务端处理这些请求返回结果。

    应对大量的请求,Redis 中使用 I/O 多路复用程序同时监听多个套接字,并将这些事件推送到一个队列里,然后逐个被执行。最终将结果返回给客户端。

    非CPU密集型任务

    采用单线程的缺点很明显,无法使用多核CPU。Redis作者提到,由于Redis的大部分操作并不是CPU密集型任务,而Redis的瓶颈在于内存和网络带宽。

    在高并发请求下,Redis需要更多的内存和更高的网络带宽,否则瓶颈很容易出现在内存不够用和网络延迟等待的情况。

    单线程的优点

    • 避免多线程上下文切换导致的性能损耗
    • 避免多线程访问共享资源加锁导致的性能损耗

    3. 为什么不采用多进程或多线程处理?

    • ①多线程处理可能涉及到锁
    • ②多线程处理会涉及到线程切换而消耗 CPU

    4. 单线程处理的劣势

    • ①耗时的命令会导致并发的下降,不只是读并发,写并发也会下降
    • ②无法发挥多核 CPU 性能,不过可以通过在单机开多个 Redis 实例来完善

    5. Redis存在线程安全问题吗

    Redis 采用了线程封闭的方式,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个 Redis 操作(即多个 Redis 操作命令)的复合操作来说,依然需要锁,而且有可能是分布式锁。

  • 相关阅读:
    使用IDEA创建Vue3通过Vite实现工程化
    华为云大数据平台,助力企业数字化转型成效明显
    互联网摸鱼日报(2023-11-06)
    java 8 stream api将List<T>转换成树形结构
    SpringBoot
    【SQL 初级语法 5】集合运算
    Android studio中如何下载sdk
    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第八章 Windows常见特洛伊木马任务(1)有趣的键盘记录器
    Windows10安装Docker(基于WSL2,包含WSL2安装教程)
    Docker+HomeAssistant+HACS+设备接入教程
  • 原文地址:https://blog.csdn.net/m0_67942533/article/details/126480451