持久化的作用:
(1)定义:
redis所有的数据都是在内存中的,对数据的更新异步的保存到磁盘上
rdb是redis内存到硬盘的快照,用于持久化
(2)持久化方式:
快照:msql的dump方式 redis的RDB
写日志:MYSQL的binlog redis的AOF
(1)RDB方式:
什么是rdb:
将redis内存中的数据以二进制的方式保存在硬盘上,当redis断电重启时;从二进制的rdb文件中恢复
触发机制:
save命令(同步命令); 执行该命令,其他的命令都会被阻塞
客户端执行完save命令之后,redis会生成rdb文件,存储在磁盘上
造成的问题:当内存中数据过多时,会将其他的命令阻塞,因为是单线程的
若存在老的rdb文件 ,将老的rdb文件替换掉
优点:不需要fork操作,所以不需要消耗额外的内存
缺点:会阻塞掉客户端的命令
bgsave(异步命令):
客户端执行完bgsave之后,redis的主进程会fork出子进程来完成创建rdb的过程
fork过程是很快的,但是若执行变慢也会阻塞掉其他的进程,一般不会
此时其他命令过来reedis会去执行,不会被阻塞。
文件策略同上
优点不会阻塞客户端的命令
但是会消耗内存来进行fork操作
自动:
自动的生成rdb文件 使用了bgsave命令
自动生成的相关配置:
save 900 1 900s内执行了1次redis操作 会进行rdb
save 300 10 300s内执行了10次redis操作 会进行rdb
save 60 10000 60s内执行了10000次redis操作 会进行rdb
dbfilename dump-${port}.rdb rdb文件的名称用机器的端口号来区分
dir /diskPath RDB文件所在的文件路径
stop-writes-on-bgsave-error yes bgsave出现错误就停止rdb文件的写入
rdbcompression yes 对rdb文件进行压缩
rdbchecksum yes 开启校验和操作