无需硬盘的复制

正如之前所说,主服务器在进行完整同步的时候,需要在本地创建 RDB 文件,然后通过套接字将这个 RDB 文件传送给从服务器。

但是,如果主服务器所在宿主机器的硬盘负载非常大又或者性能不佳,创建 RDB 文件引起的大量硬盘写入将对主服务器的性能造成影响,并导致复制进程变慢。

为了解决这个问题,Redis 从 2.8.18 版本开始引入无需硬盘的复制特性(diskless replication):启用了这个特性的主服务器在接收到 REPLICAOF 命令时将不会再在本地创建 RDB 文件,而是会派生出一个子进程,然后由子进程通过套接字直接将 RDB 文件写入至从服务器。这样主服务器就可以在不创建 RDB 文件的情况下,完成与从服务器的数据同步。

要使用无需硬盘的复制特性,我们只需要将 repl-diskless-sync 配置选项的值设置为 yes 就可以了:

  1. repl-diskless-sync <yes|no>

比如以下代码就展示了如何在启动 Redis 服务器的同时,启用服务器的无需硬盘复制特性:

  1. $ redis-server --repl-diskless-sync yes

最后要注意的是,无需硬盘的复制特性只是避免了在主服务器上创建 RDB 文件,但仍然需要在从服务器上创建 RDB 文件。Redis 目前还无法在完全不使用硬盘的情况下完成完整数据同步,但不排除将来会出现这样的功能。