Redis持久化
持久化:即以文件的形式保存到硬盘中。Redais持久化有两种,RDB(Redis DB)和AOF(AppendOnlyFile)
一、RDB:将服务器包含的所以数据库数据以二进制的形式保存到硬盘,保存文件可通过redis配置文件设置
Reids创建RDB文件有三种常见的方式
1、在服务器执行客户端发送的SAVE命令,执行该命令时,服务器将被阻塞,无法处理客户端发送的请求。
2、服务器执行客户端发送的BGSAVE命令,执行该命令时,服务器会创建一个新进程进行持久化,不会造成阻塞,但会消耗额外内存
3、使用sava配置选设置的自动保存条件被满足,服务器自动执行BGSAVE
默认三条策略(只要有一条策略满足就会执行),其中Save 300 10表示距离上次创建文件已经过去300秒,并且服务器的所有数据库总共已经发生了至少10次修改,则执行BGSAVE。每次创建RDB文件后,计时器自动清零。
缺点:创建RDB文件需要将服务器所有数据保存起来,很耗费资源和时间,创建RDB文件太频繁会影响服务器性能。
二、AOF:以追加的形式将命令写入AOF文件末尾,AOF文件存储了服务器执行过的所有数据库修改的命令
1、默认情况下是不开启的,有三个策略。
1)alway:服务器每执行应该命令就调用一次fdatasync,将缓存区里面的数据写入硬盘
2)Everysec:服务器没秒重调用一次fdatasync,这种策略最多丢失一秒的数据
3)no:服务器不主动调用fdatasync,有操作系统决定什么时候具体写入硬盘时间
注:目前常见操作系统中,执行系统调用write函数,将一些内容写入某个文件里面时,为了提高效率,通常不会直接将内容写到硬盘里面,而是现将内容放入一个内存缓冲区里,等到缓冲区被填满,或者用户执行fsync调用和fdatasync调用时才将存储在缓存区里的内容真正写入硬盘中
2、触发重写AOF(将aof文件的命令进行合并、优化)
例子:写入两个命令set name xiaoming,set name xiaohong,重写后的结果就是set name xiaohong
1)客户端向服务器端发送BGREWRITEAOF命令
2)通过设置配置选项来让服务器自动执行BGREWRITEAOF命令
auto-aof-rewrite-min-size 64mb:表示触发AOF重写所需最小体积,只要AOF文件的体积大于等于64mb,服务器就会考虑是否需要进行AOF重写
Auto-aof-rewrite-percentage 100:表示当AOF文件的体制大于auto-aof-rewrite-min-size指定的体制,并且超过上次重写之后体积的100%时,就会触发AOF重写
三、还原备份的数据:只需将备份的数据放到配置文件设置的位置,重启服务器即可