栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis大白话(●二●)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis大白话(●二●)

目录

珞Redis线程理解

单线程/多线程

I/O多路复用

Redis为什么快?


这里是CS大白话专场,让枯燥的学习变得有趣!

没有对象不要怕,我们new一个出来,每天对ta说不尽情话!

好记性不如烂键盘,自己总结不如收藏别人!

珞Redis线程理解

单线程/多线程

Redis到底是单线程还是多线程???现在如果再简单地说它是单线程的,那你就out啦!

Redis5.x及之前的版本确实都是单线程的,它的工作机制是这样滴:

 

这样的处理流程会导致一个问题,就是进程阻塞,当请求1的I/O阻塞时,整个进程都无法对其他客户端提供服务。而Redis6.x之后的工作机制是这样滴:

可以看到,Redis的工作进程只有一个,广义上还是单线程的,但是新版本的Redis将读取和返回IO的操作交由IO子进程进行,工作进程只负责执行指令,与旧版本相比,创建子进程大大降低了处理时间。

I/O多路复用

简单了解了Redis的工作机制,我们可以发现Redis采用了多路复用技术,它具体是咋实现的捏?

首先,多路复用机制大致分为以下三种:

select/poll:这两种采用无差别轮询模式,如果没有接收到数据,则进程进入阻塞态,当进程被唤醒时,需要遍历每个socket判断哪个socket接收到了数据。这种方式需要不断在用户态和内核态之间拷贝fd集合,时间复杂度为O(N)。而且,select基于数组存储,有最大连接数限制(1024/x32,2048/x64),poll是基于链表存储故没有限制。

epoll:采用回调模式,只需要管理有事件发生的socket,复杂度为O(1),在socket连接数量较大而活跃连接较少时epoll更高效,其主要调用如下三个函数:

epoll_creat():创建epoll对象,返回一个非负值的文件描述符epfd,调用失败返回-1。

epoll_ctl():在epfd上绑定、修改或解绑需要检测的socket。

epoll_wait():等待数据。

Redis主要就是基于epoll实现的。

Redis为什么快?

基于内存,内存的读写速度快;

避免了消耗CPU内核的线程切换;

单个Redis线程不需要考虑加锁放锁等问题;

多路复用处理并发连接;

数据结构简单。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031879.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号