redis持久化 ~ langhai
redis持久化
RDB持久化:Redis Database Backup file,也被称为数据快照,简单来说就是把内存中的所有数据都记录到磁盘中。
save命令:执行save命令,可以立即执行一次RDB。save命令会导致主进程执行RDB,这个过程中其他所有命令都会被阻塞。只有在数据迁移时可能用到。
bgsave命令:这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求。
停机时:redis停机时会执行一次save命令,实现RDB持久化。
测试一下 用bgsave命令:
在redis命令运行目录下,可以找到这个文件dump.rdb。
在redis的配置文件当中能找到相关配置记录:
这个什么意思呢?
第一条save 900 1 900秒(15分钟),至少有1个key被修改了,就执行bgsave命令。下面两条的意思是类似的,如果要禁用rdb保存机制,则直接把这一段注释起来即可。
这里压缩功能,如果磁盘空间够的话,可以关闭,从而节省CPU性能。
这里可以设置文件的名字。
这里可以设置文件保存在哪一个目录。
RDB原理:bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入RDB文件。
当fork过程中,主进程如果有写操作的时候,会拷贝一份数据,执行写操作。
RDB缺点:RDB有执行间隔,可能存在丢失数据的风险。
fork子进程、压缩、写RDB文件比较耗时。
AOF持久化:Append Only File追加文件。redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。
默认情况下这个功能是关闭的。
文件名字修改此处即可。
这里可以配置AOF的记录频率,第一种always,有新的写命令,直接记录到AOF文件当中,性能消耗比较大。第二种默认模式,everysec,写命令执行完成之后,先把命令放入AOF缓冲区中,然后每隔1秒将缓冲区的数据写到AOF文件当中。第三种模式,no,写命令执行完成之后,也是把命令放入AOF缓冲区中,由操作系统决定将缓冲区的内容写回磁盘。
AOF文件重写:(AOF文件会比RDB文件大的多。)AOF会记录对同一个key的多次写操作,只有最后一次写操作才是有意义的。通过bgrewriteaof命令可以让AOF文件执行重写功能。
这些配置,将自动触发AOF的重写,第一条配置的意思是 这次AOF文件和上次的AOF文件做对比,增长超过多少百分比就触发重写。第二条配置的意思是AOF文件占用体积最小以上才触发AOF重写。
RDB的宕机恢复速度比AOF要快。在数据恢复优先级方面优先AOF文件,因为数据完整性更高。
有任何问题联系 QQ 676558206 email [email protected] [email protected]