Redis持久化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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重写

 

三、还原备份的数据:只需将备份的数据放到配置文件设置的位置,重启服务器即可

 

 

以上是关于Redis持久化的主要内容,如果未能解决你的问题,请参考以下文章

Redis高级(持久化--redis主从架构--redis哨兵模式--redis分片集群)

Redis持久化

redis 之redis持久化rdb与aof

redis学习系列——redis持久化

Redis学习-4-2 Redis持久化

redis 的持久化策略有几种