这里的IO多路复用并不是特指select、epoll、evport、kqueue中的一种,Redis对于这些多路复用函数都进行了包装,每一种都有具体的API,程序在编译时会自动的选择系统中性能最高的IO多路复用程序作为底层实现。
稍微总结一下,今天我们分享了redis的两种持久化方式,RDB和AOF。
RDB的优点是:
二进制压缩文件,恢复速度快
RDB缺点是:
可能丢失数据
AOF的优点是:
不易丢失数据,数据完整性好
AOF的缺点是:
每一步操作都记录,相对影响性能
数据恢复慢,文件较大
具体使用场景上,数据重要性不高,且要求性能,可以使用Redis默认的RDB方式。如果数据完整性要求较高,则可以使用AOF和RDB结合的方式(AOF前面使用保存RDB的二进制文件,后面保存写操作)。
文件事件处理器的结构包含 4 个部分:
多个 socket
IO 多路复用程序
文件事件分派器
事件处理器(包括:连接应答处理器、命令请求处理器、命令回复处理器)
按缓冲区的用途分为:
客户端的输入和输出缓冲区;
主从集群中主节点上的复制缓冲区和复制积压缓冲区。
从缓冲区溢出对Redis的影响分类:
缓冲区溢出导致网络连接关闭;
缓冲区溢出导致命令数据丢失。
缓冲区溢出的原因及解决方案:
命令数据发送过快过大。普通客户端避免使用bigkey,复制缓冲区避免过大的RDB文件;
命令数据处理较慢。减少Redis主线程上的阻塞操作,例如使用异步的删除操作;
缓冲区空间过小。使用clinet-output-buffer-limit配置项设置合理的输出缓冲区、复制缓冲区和复制积压缓冲区大小。