Redis快照持久化
持久化: 即把数据存储在硬盘中
rdb的工作原理:
1redis使用fork函数复制当前进程(父进程)的副本(子进程) –在使用fork函数那一刻(T1),父子进共享同一内存数据,其后当父进行执行新的命令时候,操作系统会对内存要修改的数据进行备份以保证子进程的数据是T1时刻的数据。
2父进程接收并处理来自客户端的命令,子进程开始将内存的数据写入硬盘的临时文件中 3当子进程写完所有数据后会用临时文件替换旧的rbd文件
快照持久化缺陷
在2个保存点之间,断电,将会丢失1-N分钟的数据
解决方法aof持久化
Redis快照持久化案例
1快照准备
[root@fei redis]# vim redis.conf
修改内容如下
save 900 1
save 300 10
save 60 100
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6379.rdb
dir /usr/local/src/redis/back
--杀死redis线程
[root@fei redis]# pkill -9 redis
[root@fei redis]# mkdir back
[root@fei redis]# ls
back bin redis.conf
[root@fei redis]# ./bin/redis-server ./redis.conf
2测试
[root@fei redis]# ./bin/redis-benchmark -n 2000
3查看快照文件
[root@fei redis]# ls ./back
dump6379.rdb
发生rbd的情况
1根据配置规则发生rdb
1安规则定时将内存数据存储到硬盘中
2每隔N分钟或N次写操作后, 从内存dump数据形成rdb文件,压缩放在备份目录
配置规则参数说明
save 900 1 #必须900秒之后至少1个关键字发生变化。就发生快照持久化
save 300 10 #必须是300秒之后至少10个关键字发生变化。就发生快照持久化
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。就发生快照持久化
stop-writes-on-bgsave-error yes #后台快照持久化时发生错误,客户端停止向服务端写操作。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir ./ #设置保存快照持久化目录,rdb文件会写入该目录。
2用户执行save或bgsave命令
用户执行save:
redis会同步进行快照操作,快照执行过程中会阻塞所有来自客户端的情况,数据库数据比较多时,会发生redis长时间不响应情况。
用户执行bgsave:
该命令可以在后台异步进行快照操作,快照的同时也可以响应来至客户端的请求
3执行flushall命令
该命令清空数据库所有数据,快照触发条件:1配置规则不为空就触发,否则不触发。
4执行复制(replication)
发生在主从复制这个环境,即使没有定义1配置规则,并且也没有手动执行快照,也会生成rdb快照文件
使用rdb情况
redis启动后会读取rdb文件,将数据从硬盘加载到内存中
---------------------