码迷,mamicode.com
首页 > 其他好文 > 详细

Redis持久化

时间:2017-10-16 00:11:52      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:内存   保存   系统调用   二进制   img   合并   等于   常见   系统   

持久化:即以文件的形式保存到硬盘中。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持久化

标签:内存   保存   系统调用   二进制   img   合并   等于   常见   系统   

原文地址:http://www.cnblogs.com/chensr/p/7674946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!