标签:mic 协议 strong list 发送 请求 拒绝 syn 服务器
Redis 已经为我们提供了一种持久化的机制,分别是 RDB 和 AOF 两种方式。
由于 Redis 是基于内存的数据库,所以当服务器出现故障的时候,我们的数据就得不到安全保障。
这个时候就需要将内存中的数据存储到磁盘中,当我们服务器重启时,便可以通过磁盘来恢复数据,这个过程就叫做 Redis 持久化。
RDB全称Redis Database Backup file(Redis数据备份文件),也可以称为Redis数据快照。
RDB 文件是一个经过压缩的二进制文件(默认:dump.rdb);
RDB 文件保存在硬盘里;
通过保存数据库中的键值对来记录数据库状态。
当 Redis 持久化时,程序会将当前内存中的数据库状态保存到磁盘中。
创建 RDB 文件主要有两个 Redis 命令:SAVE 和 BGSAVE。
同步操作,执行命令时,会阻塞 Redis 服务器进程,拒绝客户端发送的命令请求。
def SAVE():
# 创建 RDB 文件
rdbSave()
异步操作,执行命令时,子进程执行保存工作,服务器还可以继续让主线程处理客户端发送的命令请求。
def BGSAVE():
# 创建子进程
pid = fork()
if pid == 0:
# 子进程负责创建 RDB 文件
rdbSave()
# 完成之后向父进程发送信号
signal_parent()
elif pid > 0:
# 父进程继续处理命令请求,并通过轮训等待子进程的信号
handle_request_and_wait_signal()
else:
handle_fork_error()
载入工作在服务器启动时自动执行。
AOF全称为 Append Only File(追加日志文件)。日志是写后日志,Redis 是先执行命令,把数据写入内存,然后才记录日志。
通过保存 Redis 服务器所执行的写命令来记录数据库状态;
写入 AOF 文件的所有命令都是以 Redis 的命令请求协议格式保存的。
若 AOF 持久化功能处于打开状态,服务器在执行完一个命令后,会以协议格式将被执行的写命令追加到服务器状态的 aof_buf 缓冲区的末尾。
服务器每次结束一个事件循环之前,都会调用 flushAppendOnlyFile 函数,这个函数会考虑是否需要将 aof_buf 缓冲区中的内容写入和保存到 AOF 文件里。
flushAppendOnlyFile 函数执行以下流程:
WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件;
SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。
这个函数是由服务器配置的 appendfsync 的三个值:always、everysec、no 来影响的,也被称为三种策略。
标签:mic 协议 strong list 发送 请求 拒绝 syn 服务器
原文地址:https://www.cnblogs.com/KL2016/p/14869954.html