redis线程模型以及高性能分析

本文深入探讨了Redis的单线程模型,包括其文件事件处理器的五个组成部分,如IO多路复用程序、事件处理器等。Redis通过非阻塞IO和单线程避免上下文切换,实现高性能、高并发。此外,内存操作和命令批处理也是其高性能的关键因素。
摘要由CSDN通过智能技术生成

前言

  我们都知道redis的访问响应非常快,常常用redis来做缓存、消息队列、发布订阅等,支撑系统实现高性能、高并发。但redis是如何具有这样的能力的呢?

一、redis的线程模型

  redis是一个单线程的文件事件处理器,在redis的线程模型中,redis的文件事件处理器包含了五个部分的内容:多server socket、IO多路复用程序、socket事件队列、文件事件分派器、三种事件处理器(连接应答事件处理器、命令请求事件处理器、命令回复事件处理器),而redis之所以认为是单线程的,是因为文件事件分派器是单线程去消费socket事件队列的事件,整体模型如下图:
在这里插入图片描述  1、IO多路复用程序
    redis的IO多路复用程序可通过select/epoll/evport/kqueue四种实现,程序在编译时根据性能较好的库自动选择其中的一个函数库。
    IO多路复用程序通过监听socket,当有AE_READABLE和AE_WRITABLE的两种事件发生时把相应socket压入队列中
在这里插入图片描述  2、事件处理器
    (1)连接应答处理器:redis在启动初始化时会将连接应答处理器与server socket的AE_READABLE事件关联起来,当有socket产生连接请求时会产生AE_READABLE连接事件,由文件事件分派器交由连接应答处理器处理。连接成功后,redis会将AE_READABLE事件与命令请求处理器关联起来
    (2)命令请求处理器:当客服端发生请求时,会产生AE_READABLE事件,由命令请求处理器执行socket消息读取操作
    (3)命令回复处理器:当服务器有消息要返回给客户端时,redis会将AE_WRITABLE事件与命令回复处理器关联起来,当客服端准备好接收,产生AE_WRITABLE事件时,由命令回复处理器执行socket写入操作返回数据

二、如何确保高性能

  1、redis读写都是操作内存:纯内存读写
  2、由redis线程模型可知,redis采用非阻塞方式的IO多路复用程序实现客户端与服务端的交互
  3、单线程的文件事件分派器,避免了频繁的上下文切换带来的性能问题
  4、redis支持通过管道的方式一次性批量执行多个命令和返回结果

参考文章:
  https://blog.csdn.net/y277an/article/details/98342442
  https://www.cnblogs.com/xiaowei123/p/13118176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值