目录
两种持久化
RDB
简介
持久化策略
手动触发命令
自动触发
执行流程
Fork操作
图示执行流程
RDB配置
AOF
简介
AOF开启
持久化策略
持久化流程
文件损坏修复
文件重写压缩
重写原理
重写流程
图示执行流程
AOF配置
两者相比
优
缺
官方推荐
启用推荐
储存方式
只做缓存
同时开启两种持久化方式
那要不要只使用AOF呢?
性能建议
两种持久化
Redis的数据都是储存在内存中,如果遇到进程关闭,服务器宕机等意外操作,就需要持久化操作把我们的数据持久化存储成文件到磁盘,当服务器恢复我们重启Redis时,就可以通过这些文件进行数据恢复 。
在Redis中提供两种持久化方式:
1.RDB(Redis )(默认):将数据以快照的方式存储到磁盘,生成的文件名默认为dump.rdb
2.AOF( Of File):以日志形式把每次操作数据的命令记录下来储存到磁盘,生成为文件名默认为.aof
RDB 简介
将数据以快照的方式存储到磁盘,生成的文件名默认为dump.rdb,恢复时将dump.rdb文件读到内存中 。
RDB可以通过命令手动触发,也可以自动触发 。
持久化策略 手动触发命令
save:该命令会开始持久化操作,但是save会使Redis服务阻塞,直到持久化完成 。当数据量较大,会造成长时间阻塞,不建议使用
文章插图
:该命令会执行fork创建一条子进程,由子进程进行持久化操作,Redis服务一般只会在创建子进程时阻塞,后续持久化操作由子进程完成,Redis服务不会阻塞 。
自动触发
在配置文件中可以看到以下配置,如果被注释掉需要取消注释
save 3600 1save 300 100save 60 10000
它表示在3600/300/60秒内数据被修改过1/100/10000次时,自动触发操作 。我们可以通过修改或添加来改变机制 。
执行流程
1.执行时,Redis进程会先检查当前进程下是否存在正在执行其他子进程,如果存在就是直接结束本次持久化 。
2.通过fork操作创建子线程,创建期间Redis进程阻塞 。
3.创建完毕,Redis进程恢复,可以继续处理其他命令 。
4.创建的子进程先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件 。
5.持久化完成,子进程通知Redis
整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 。
如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效 。RDB的缺点是最后一次持久化后的数据可能丢失(有新的数据写入但并没有触发时发生服务器意外),导致数据完整性不高 。
这里为什么要用临时文件?因为如果直接写入文件的话如果写入的过程出现服务器宕机等操作,可能会出现数据大规模丢失情况 。
Fork操作
Fork的作用是复制一个与当前进程一样的进程 。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程 。Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑 。
在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux中引入了“写时复制技术” 。
一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的改变的内容页复制一份给子进程 。
- 小白一定要看!!! 结合实验详解USG6000V防火墙的相关配置
- Linux中awk工具的使用详解
- 埃及认证_埃及认证详解
- No package redis available
- 当年那首歌
- 不定式、分词、动名词 【04 英语语法:非谓语动词详解】
- opencv——SVM参数详解
- 异常将上下文初始化事件发送到类的侦听器实例_深入浅出JVM性能调优——JVM内存
- su、sudo命令详解 Linux系统安全及应用(详细)
- linux权限sudo和su,系统运维|深入理解 sudo 与 su 之间的区别