• 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 操作命令)的复合操作来说,依然需要锁,而且有可能是分布式锁。

  • 相关阅读:
    qt 使用单例模式操作数据库
    threadLocal为什么线程安全
    nginx学习(1)
    11.10 - 每日一题 - 408
    java中的多线程
    聊聊Http服务化改造实践
    艾美捷Immunochemistry FAM FLICA Poly Caspase检测方案
    推出全新分布式计算接口,OneFlow v0.7.0发布,LiBai代码库、Serving、MLIR一应俱全...
    抢答器设计
    html静态网站基于游戏网站设计与实现共计10个页面 (仿地下城与勇士游戏网页)
  • 原文地址:https://blog.csdn.net/m0_67942533/article/details/126480451