摘要:
Redis内存回收 Redsi之所以性能强,最主要的原因就是基于内存存储。然而单节点的redis其内存大小不宜过大,会影响持久化或者主从同步性。 我们可以通过修改配置文件来设置redis的最大内存: 当内存使用达到上限时,就无法存储更多数据了 过期策略 在学习redis缓存的时候我们说过,可以通过e 阅读全文
摘要:
Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub): ① 客户端(client)向服务端(server)发送一条命令 ② 服务端解析并执行命令,返回响应结果给客户端 因此客户端发送命令的格式、服务端相应结果的格式必须有一个规范,这个规范就是通讯协议。 而在Redi 阅读全文
摘要:
Redis网络模型 Redis通过IO多路复用来提高网络性能,并且支持各种不同的多路复用实现,并且将这些实现进行封装,提供了统一的高性能事件库API库AE: ae.c对当前的系统环境做一个判断 来看下Redis单线程网络模型的整个流程 Redis 6.0版本中引入了多线程,目的是为了提高IO读写效率 阅读全文
摘要:
Redis是单线程还是多线程? Redis到底是单线程还是多线程? 如果仅仅聊Redis的核心的业务处理部分(命令处理),答案是单线程 如果是聊整个Redis那么答案是多线程 在Redis版本迭代过程中,在两个重要的时间节点上引入了多线程的支持: Redis v4.0:引入多线程异步处理一些耗时较长 阅读全文
摘要:
信号驱动IO 信号驱动IO是与内核建立SIGIO的信号关联并设置回调,当内核有FD就绪时,会发出SIGIO信号通知用户,期间用户应用可以执行其它业务,无需阻塞等待 缺点: 当有大量IO操作时,信号较多,SIGIO处理函数不能及时处理可能导致信号队列溢出 而且内核空间与用户空间的频繁信号交互性能也较低 阅读全文
摘要:
基于epoll的服务端流程 基于epoll模式的web服务的基本流程图: 阅读全文
摘要:
epoll事件通知机制 当FD有数据可读时,我们调用epoll_wait就可以得到通知。但是事件通知的模式有两种: LevelTriggered:简称LT。当FD有数据可读时,会重复通知多次,直到数据处理完成。是epoll的默认模式。 EdgeTriggered:简称ET。当FD有数据可读时,只会被 阅读全文
摘要:
Epoll epoll模式是对select和poll的改进,它提供了三个函数: Epoll有没有解决之前select或者poll的问题? select或者poll把要监听的数组或集合拷贝到内核空间,等待FD就绪,就绪后,还要拷贝回用户空间。 epoll把select函数的功能拆分开了,建立event 阅读全文
摘要:
Poll Poll模式对select模式做了简单改进,但性能提升不明显,部分关键代码如下: 如果设置超时时间,当超时时间过了,pollfd的fd没有就绪,revents就会赋值为0 IO流程: ① 创建pollfd数组,向其中添加关注的fd信息,数组大小自定义 ② 调用poll函数,将pollfd数 阅读全文
摘要:
Select select是Linux中最早的I/O多路复用实现方案: nfds是FD遍历的一个上限,遍历到这个值的时候,就意味着不用再往后去遍历了。 fds_bits 是存储1024个比特位,代表1024个fd,这个数量是__d_mask四个字节共32个比特位乘以fds_bits的32长度得到的 阅读全文