Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据回复到内存(redis)里面。数据保存到硬盘的过程就称为“持久化”。
一、snap shotting 快照持久化
该持久化默认开启,一次性把redis的所有数据全部保存到硬盘中一份。如果数据非常多(10G-20G)就不适合频繁进行该持久化操作。
默认保存文件:dumo.rdb。
redis.conf配置:
1、快照保存规律:(增,删,改)不包括查询。
save 900s 1K 900内有1K发生修改,快照就保存。
save 300s 10K 300内有10K发生修改,快照就保存。
save 60s 10000K 1000内有10000K发生修改,快照就保存。
以上三个save的意思:
数据修改的频率高,备份的频率也高。
数据修改的频率低,备份的频率也低。
2、dbfilename dump.rdb 备份文件的名称
3、dir ./ 备份文件的地址
二、手动发起快照持久化
1、手动进行快照持久化
指令:./redis.cli bgsave
三、append only file (AOF持久化,精细持久化)
1、本质:把用户执行的每个“写”指令(添加,修改,删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。
2、开启AOF持久化(会清空redis之前的数据)
redis.conf配置文件:
1).appendonly no -> appendonly yes
2).去掉 appendfilename appendonly.aof 前面 # 开启保存文件
3).配置文件被修改,需要删除旧进程;再根据新进程配置文件,启动新进程。
ps -A | grep redis 查看进程
kill -9 7287 停止进程
./redis-server redis.conf 启动进程
4).新进程启动完毕之后,可以在看到设置指定保存路径里面多了aooendonly.aof文件。
3、redis的持久化方式 (redis.conf配置文件中)
appendfaync always // 每次收到写的指令就立即的强制写入磁盘,最慢,不推荐使用。
appendfaync ecerysec // 每秒强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐。(默认)
appendfaync no // 完全依赖os,性能最好,持久化没保证。不推荐。
4、为aof备份文件做优化处理
例如:多个set变成一个set指令
指令:./redis-cli barewriteaof 压缩aof备份文件的大小
四、redis持久化相关的指令
1.bgsave 异步保存数据到磁盘。(快照持久化)
2.lastsave 返回上次成功保存到磁盘的Unix时间戳。
3.shutdown 同步保存到服务器并关闭redis服务器。
4.bgrewriteaof 当日志文件过长时,优化aof日志文件存储。
5. ./redis-cli bgrewriteaof
6. ./redis-cli bgsave
7. ./redis-cli -h 127.0.0.1 -p 6379 bgsave // 手动发起快照
快照持久化和AOF持久化是相辅相成的,在数据还原的时候,将快照持久化和AOF持久化都要进行数据还原。