*Rdb:在指定时间间隔内,将内存中的数据快照写入磁盘,也就是snapshot快照,恢复的时候将快照加载到内存,且redis会单独创建一个子进程(fork)来进行持久化,会先将数据写到一个临时文件,待持久化过程都结束了,替换上次的文件,因此主线程不进行io操作,确保了效率
缺点:最后一次保存之后,如果出现故障那么修改数据可能丢失,且fork操作可能非常耗时
解释:Fork作用--复制一个与当前进程一样的进程,数据和原进程一样,作为原进程的子进程;但是当原进程数据量大的时候,操作耗时大;
配置文件中的默认保存策略:
Save 900 1 ---900s内key改变1次则保存
Save 300 10 ---300s内key改变10次则保存
Save 60 10000 ---60s内key改变10000次则保存
当然我们也可以手动保存:
SAVE 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。
一般来说,在生产环境很少执行 SAVE 操作,因为它会阻塞所有客户端,保存数据库的任务通常由 BGSAVE 命令异步地执行。
*Aof:日志的形式记录每个写操作,将redis所有写操作记录下来,记录操作和库,保存成.aof的格式, 在redis启动时,先加载aof文件;
Aof的配置策略:
always 同步持久化 每次发生数据变更会被立即记录到磁盘,
Everysec 异步持久化(默认) 每秒记录 有数据丢失 有可能丢失1秒
如果aof和rdb两种策略都开启,那么加载会以aof优先;
对比:aof每秒同步,丢失数据少,而rdb有可能丢失最后一次修改的数据,相同数据而言,aof文件要远大于rdb,恢复速度慢于rdb,aof运行效率要慢与rdb