zoukankan      html  css  js  c++  java
  • 【JavaP6大纲】Redis篇:redis单线程模型

    你是如何理解redis单线程模型的?

    Redis 里面的单线程主要是 Redis 的网络 IO 和键值对读写,它是由一个线程来完成的,但是 Redis 的其他功能,比如说持久化、异步删除、集群数据同步等等,这些其实是由额外的线程执行的,这里的单线程主要是Redis 对外提供键值存储服务来说的。

    主要流程是这样的:

    1. redis 会将每个客户端都关联一个指令队列,客户端的指令通过队列来按顺序处理,先到先处理,一个客户端指令队列中的指令是按顺序执行的。
    2. redis 的每个客户端都关联一个响应队列,通过响应队列有顺序地将指令的返回结果返回给客户端。
    3. redis同一时间每次都只能处理一个客户端队列中的指令或者响应。

    Redis 如何处理高并发客户端连接?

    redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。

    为什么redis使用单线程模型还能保证高性能?

    1. 第一个是因为redis 是纯内存操作,内存的响应时长是 100 纳秒左右,这是 redis 的 QPS 过万的重要基础。
    2. 第二个是因为redis 的核心是基于非阻塞的IO多路复用机制,单线程模型避免了线程切换和竞态产生的消耗,解决了多线程的切换性能损耗问题。
    3. 第三个是因为redis 底层使用C语言实现,一般来说,C 语言实现的程序"距离"操作系统更近,执行速度相对会更快。

    什么是阻塞IO?

    当我们调用

  • 相关阅读:
    IOC
    paxos算法
    搜索引擎相关
    java常识
    Redis相关概念
    Keepalived简单理解
    LVS简单理解
    dbproxy
    用不上索引的sql
    二叉树、B树、B+树、B*树、VAL树、红黑树
  • 原文地址:https://www.cnblogs.com/javawxid/p/15644480.html
Copyright © 2011-2022 走看看