zoukankan      html  css  js  c++  java
  • redis 到底是单线程还是多线程,看完就懂了

    很多开发者都人为Redis 是单线程的,说是没错,但其实也是有问题的,为什么这么说呢,接下来我就带大家来了解一下

    首先我们来了解一下Redis 和CPU的关系

    一般来说 Redis 的瓶颈并不在 CPU,而在内存和网络。
    如果要使用 CPU 多核,可以搭建多个 Redis 实例来解决。

    Redis 是单线程的说法是怎么来的呢?

    “Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型”

    但是又说redis 是单线程也是不正确的?

    大家所熟知的 Redis 确实是单线程模型,指的是执行Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程,Redis 其他模块还有各自模块的线程的。

    那redis 有多线程是什么的说法呢?

    在Redis 4.0 开始就有多线程的概念了,比如 Redis 通过多线程方式在后台删除对象、以及通过 Redis 模块实现的阻塞命令等

    在Redis  6.0 版本 里面的 Theaded IO 就使用了多线程, 如网络数据的读写和协议解析等,需要注意的是,执行命令的核心模块还是单线程的 (如果真的要使用,开启对应的配置值开关)

    为什么网络处理要引入多线程?

    前面有提到过,Redis 的瓶颈并不在 CPU,而在内存和网络。
    内存不够的话,可以加内存或者做数据结构优化和其他优化等,但网络的性能优化才是大头,网络 IO 的读写在 Redis 整个执行期间占用了大部分的 CPU 时间,如果把网络处理这部分做成多线程处理方式,那对整个 Redis 的性能会有很大的提升。

    现在你懂了,redis 到底是单线程还是多线程,哈哈哈

    机会是留给有钱的人的

  • 相关阅读:
    hibernate框架的搭建与简单实现增删改
    $.ajax();详解
    利用json实现数据传输
    利用ajax实现数据传输
    错误:Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp;的解决
    简单使用jstl实现敏感字替换
    实用jstl实现未登录时不能绕过登录界面的效果
    简单实用jstl实现“登录|注册”
    简单实用jstl实现代码编写
    简单使用EL进行标签的替换
  • 原文地址:https://www.cnblogs.com/fangdada/p/15088777.html
Copyright © 2011-2022 走看看