Redis--持久化

       Redis大家都在经常使用,其功能非常强大,利用其内存存储、存取快的特新能够帮助我们解决很多难题。在项目中,我们可利用Redis:1作为缓存;2作为消息队列;3生成业务唯一键;4分布式锁控制;5内存数据库……可以很好的解决一些高并发、高性能要求的业务场景。

        针对Redis的安装,五种数据结构(字符串string、哈希hash、列表list、集合set、有序集合zset),对慢查询、shell、pipeline、事务、lua等小功能的支持,这里都不再进行赘述,可以查看redis文档进行了解:http://www.redis.cn/documentation.html

今天我们来细看一下Redis的持久化。

        作为内存数据库,Redis也支持数据的持久化功能(防止由于各种意外情况,导致内存数据完全消失,可以在持久化文件中进行恢复,将损失恢复到最小),包括RDB(Redis DataBase)和AOF(Appen Only File)两种方式。

        一,RDB:此种方式是将当前进程数据生成快照保存到硬盘的过程。我们一下几个方面看下:

        1,触发机制:

         save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,不建议线上使用。

         bgsave命令:Redis进程执行fork操作创建子进程,RDB过程由于子进程负责完成,完成后自动结束,阻塞只在fork阶段,已经完全替代save命令。

         我们可以手动触发,也可以自动触发:1,save m n 表示m秒数据集存在n次修改时,自动触发bgsave操作;2,从节点执行全量复制操作,主节点会自动bgsave生成RDB文件并发送给从节点;3,执行debug reload命令重新加载Redis时;4,默认执行shutdown时,如果没有开启AOF会自动bgsave.

        2,执行流程:

       redis将RDB文件保存在dir配置的指定目录下,文件通过dbfilename进行配置。默认采用LZF算法对生成的RDB文件进行压缩处理,可以通过config set rdbcompresssion{yes|no}动态修改。

       二,AOF:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。解决了持久化的实时性。

      1,流程机制:

      说明:1,所有的写入命令会追加到aof_buf(缓冲区)中;2,AOF缓冲区根据对应的策略向硬盘做同步操作;3,AOF文件越来越大,需要对其进行重写,达到压缩的目的;4,Redis服务器重启时,可以加载AOF文件进行数据恢复。

      这里重点说下重写机制rewrite,重写后的AOF文件为什么会变小呢?1,进程内已经超时的数据不再进行写入文件;2,旧的AOF文件含有无效的命令,例如del key1,set a 111,set a 222,重写能够使进程内数据直接生成,也就是最终结果,不在进行过程的一步一步记录。3,多条写命令可以合并一个,例如:lpush list a、lpush list b、lpush list c可以转化为lpush a b c ……  从而达到减小控件的效果,当然在Redis进行加载的时候也会变得更快。

     3,比较一下二者的优缺点吧:

     综上,Redis的持久化,两种方式是互补的,我们可以用AOF进行实时备份,而利用RDB进行一定时间内的全量备份。当然更要根据我们的实际业务要求,做出合理的选择,以不变应万变。    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值