redis持久化

1.redis持久化的方式    

       由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)

 

2.RDB和AOF的区别

    2.1.1 RDB

          RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

                       

                           

 

    2.1.2 RDB触发机制

                    save           同步阻塞进行数据的保存

                        

                    bgsave      异步非阻塞进行数据的保存

                        

                    自动   

                        

                             save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存
                             save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存
                             save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存

     2.1.3 RDB的文件配置

                                                                   

           dbfilename 

           设置快照的文件名,默认是 dump.rdb

           dir

           设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。默认是和当前配置文件保存在同一目录。

           stop-writes-on-bgsave-error

           默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了

           rdbcompression

           默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。           

                              

 

     2.2 AOF

           AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

                              

     2.2.1 AOF配置的3种属性

                   always          #每次有数据修改发生时都会写入AOF文件。

           

 

               everysec     #每秒钟同步一次,该策略为AOF的缺省策略。

          

 

                no                 #从不同步。高效但是数据不会被持久化。

          

 

         3种策略的对比:

                

 

     2.2.2 AOF的重写

                AOF的重写就是把过期的数据和之前没有用的命令进行简化和维护,且AOF重写并不需要对原有AOF文件进行任何的读取,写入,分析等操作,这个功能是通过读取服务器当前的数据库状态来实现的。这样不仅仅是减少磁盘的占用量.而且加速了数据的恢复速度.

                                      

                实现AOF的重写有两种方式:

   1.bgrewriteaof命令

          

   2.AOF重写的配置

        自动触发配置时,需要:

                当前AOF文件的尺寸>AOF文件重写的最小尺寸;

                (当前AOF文件的尺寸-AOF上次启动的尺寸)/AOF上次启动的尺寸>AOF文件增长率;

          

 

     2.2.3 AOF的配置及说明 

 

                    

          appendonly

          开启aof特性,这个控制是否启用aof.

          appendfilename

          写入文件的文件名。开启aof之后,每条命令(除读之外的命令),均会写入到文件中,这里即实际写入的文件.

         appendfsync

         写入策略,默认值everysec,每秒写一次(调用flush)。另外两个值,always | no,分别表示每次redis写命令之外就写文件,和由操作系统保证。always对硬盘压力大,everysec是一个平衡值,no对硬盘压力最小,但调度由系统控制,丢失数据风险最大.

          no-appendfsync-on-rewrite

          是否在后台写时同步单写,默认值no(表示需要同步).这里的后台写,表示后台正在重写文件(包括bgsave和bgrewriteaof.bgrewriteaof网上很多资料都没有涉及到。其实关掉bgsave之后,主要的即是aof重写文件了).no表示新的主进程的set操作会被阻塞掉,而yes表示新的主进程的set不会被阻塞,待整个后台写完成之后再将这部分set操作同步到aof文件中。但这可能会存在数据丢失的风险(机率很小),如果对性能有要求,可以设置为yes,仅在后台写时会异步处理命令.

           auto-aof-rewrite-percentage

           aof文件增长比例,指当前aof文件比上次重写的增长比例大小。aof重写即在aof文件在一定大小之后,重新将整个内存写到aof文件当中,以反映最新的状态(相当于bgsave)。这样就避免了,aof文件过大而实际内存数据小的问题(频繁修改数据问题).

           auto-aof-rewrite-min-size

           aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小.

 

     2.2.4 AOF的实际操作

          1.开启appendonly

                    

         2.完后会在"/"目录创建appendonly.aof文件

                  

         3.vim appendonly.aof 文件,我们便看到了数据的写入

                  

 

 

3.RDB和AOF的取舍

          两者的比较:

                     

 

 

 

 

 

 

 

 

 

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值