赞
踩
常见方式:
命令
SAVE命令
通过客户端向服务器端发送SAVE命令,服务器会创建一个新的RDB文件
在执行SAVE命令的过程中,Redis服务器会被阻塞,无法处理客户发送的命令请求,只有在SAVE命令执行完成后,服务器才会重新开始处理客户端发送的命令请求
如果RDB文件已经存在,服务器会自动使用新的REB文件去代替旧的RDB文件
127.0.0.1:6379> save
OK
BGSAVE 命令
执行BGSAVE命令也会创建一个新的RDB文件,和SAVE的命令区别:BGSAVE不会造成Redis服务器阻塞,在执行BGSAVE命令过程中,Redis服务器仍然可以正常护理其他客户端发送的命令请求
一个异步命令,发送命令的客户端会立即的到回复
127.0.0.1:6379> bgsave
Background saving started
不会阻塞原因:
1. 当 Redis 服务器接收到 BGSAVE 命令的时候,它不会自己来创建 RDB 文件,而是通过 fork() 来生成一个子进程,然后由子进程负责创建 RDB 文件,而自己则继续处理客户端的命令请求;
2. 当子进程创建好 RDB 文件并退出时,它会向父进程(也即是负责处理命令请求的 Redis 服务器)发送一个信号,告知RDB 文件已经创建完毕;
3. 最后 Redis 服务器(父进程)接收子进程创建的 RDB 文件,BGSAVE 执行完毕
SAVE和BGSAVE区别
命令 | SAVE | BGSAVE |
---|---|---|
类型 | 同步 | 异步 |
是否服务器阻塞 | 是 | 否 |
复杂度 | O(N) | O(N) |
优点 | 不需要创建子进程,不会消耗额外的内存,可以集中资源来创建RDB 文件,所以 SAVE 创建RDB 文件的速度会比 BGSAVE快 | Redis 服务器可以在创建 RDB 文件的过程中,仍然正常地处理客户端的命令请求 |
缺点 | 执行期间会阻塞服务器 | 需要创建子进程,会耗费额外的内存 |
save <seconds> <changes>
save 900 1
save 300 10
save 60 10000
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。