高可用Redis(七):Redis持久化 (2)

高可用Redis(七):Redis持久化

Redis主进程因为创建子进程,会消耗额外的内存
需要注意的是:如果在Redis主进程fork子进程的过程中花费的时间过多,Redis仍然可能会阻塞

BGSAVE是一个异步命令,Redis客户端向Redis服务端发送BGSAVE命令后会立即得到回复,而实际的操作在Redis服务端回复之后才开始

例子:

现在Redis中已经有500万条数据

1.删除Redis的RDB文件

[root@mysql redis]# rm -rf *.rdb # 删除Redis的旧的RDB文件 [root@mysql redis]# ll total 0

2.在redis-cli中执行BGSAVE命令

127.0.0.1:6379> bgsave # 执行BGSAVE命令后会立即得到响应 Background saving started

3.在另一个redis-cli中执行命令

127.0.0.1:6379> spop key2 # 从Redis的集合中弹出'key2'的值 "value2" 127.0.0.1:6379> dbsize # 查看Redis中所有数据的总数 (integer) 4999998 127.0.0.1:6379> info memory # 查看Redis占用的内存数 # Memory used_memory:1347973736 used_memory_human:1.26G # Redis占用了1.2G内存 used_memory_rss:1383464960 used_memory_rss_human:1.29G used_memory_peak:1348224368 used_memory_peak_human:1.26G total_system_memory:2080903168 total_system_memory_human:1.94G used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction mem_fragmentation_ratio:1.03 mem_allocator:jemalloc-3.6.0

4.在系统命令提示符中执行命令

[root@mysql redis]# ps aux | grep redis | grep -v 'redis-cli' redis 856 3.1 66.3 1486404 1348920 ? Ssl 13:38 3:39 /usr/bin/redis-server 0.0.0.0:6379 # Redis的主进程 root 3015 0.0 0.0 112664 968 pts/3 R+ 15:36 0:00 grep --color=auto redis [root@mysql redis]# ps aux | grep redis | grep -v 'redis-cli' redis 856 3.0 66.3 1486404 1348956 ? Ssl 13:38 3:39 /usr/bin/redis-server 0.0.0.0:6379 # Redis的主进程 redis 3026 87.1 66.3 1486408 1348032 ? R 15:36 0:05 redis-rdb-bgsave 0.0.0.0:6379 # Redis主进程fork的子进程 root 3028 0.0 0.0 112664 968 pts/3 R+ 15:37 0:00 grep --color=auto redis [root@mysql redis]# pwd /var/lib/redis [root@mysql redis]# ls -lah # 查看BGSAVE命令运行后得到的RDB文件 total 122M drwxr-x--- 2 redis redis 22 Oct 13 15:37 . drwxr-xr-x. 64 root root 4.0K Oct 13 13:38 .. -rw-r--r-- 1 redis redis 122M Oct 13 15:37 dump.rdb

BGSAVE命令的时间复杂度为O(N)

SAVE命令与BGSAVE命令的区别

高可用Redis(七):Redis持久化

RDB持久化方式的总结

SAVE创建RDB文件的速度会比BGSAVE快,SAVE可以集中资源来创建RDB文件 如果数据库正在上线当中,就要使用BGSAVE 如果数据库需要维护,可以使用SAVE命令 3.1.3 自动创建RDB文件

打开Redis的配置文件/etc/redis.conf

save 900 1 save 300 10 save 60 10000

自动持久化配置解释:

save 900 1表示:如果距离上一次创建RDB文件已经过去的900秒时间内,Redis中的数据发生了1次改动,则自动执行BGSAVE命令 save 300 10表示:如果距离上一次创建RDB文件已经过去的300秒时间内,Redis中的数据发生了10次改动,则自动执行BGSAVE命令 save 60 10000表示:如果距离上一次创建RDB文件已经过去了60秒时间内,Redis中的数据发生了10000次改动,则自动执行BGSAVE命令

当三个条件中的任意一个条件被满足时,Redis就会自动执行BGSAVE命令

需要注意的是:每次执行BGSAVE命令创建RDB文件之后,服务器为实现自动持久化而设置的时间计数器和次数计数器就会被清零,并重新开始计数,所以多个保存条件的效果是不会叠加

用户也可以通过设置多个SAVE选项来设置自动保存条件,

Redis关于自动持久化的配置

rdbcompression yes 创建RDB文件时,是否启用压缩 stop-writes-on-bgsave-error yes 执行BGSAVE命令时发生错误是否停止写入 rdbchecksum yes 是否对生成RDB文件进行检验 dbfilename dump.rdb 持久化生成的备份文件的名字 dir /var/lib/redis/6379 RDB文件保存的目录

例子:

1.修改Redis配置文件/etc/redis.conf

save 900 1 save 300 10 save 60 5

2.重启Redis,删除已经创建的RDB文件

[root@mysql redis]# systemctl restart redis [root@mysql redis]# rm -rf dump.rdb [root@mysql redis]# pwd /var/lib/redis [root@mysql redis]# ls [root@mysql redis]#

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzsxz.html