redis持久化

redis的持久化机制
redis是一个支持持续化内存数据库,同时redis需要经常将内存中的数据同步到磁盘来保存持久化.
2种方式持久化:
1.snapshotting(快照):仅存放数据
将内存中数据在指定的时间间隔后以快照的方式写入到二进制文件中,文件名:dump.rdb,配置redis在n秒后,
如果超过m个key被修改将内存中数据写入到磁盘:
save 900 1 #在900秒后,若至少有1个key发生变化,则dump内存快照
save 300 10 #在300秒后,若至少有10个key发生变化,则dump内存快照
save 60 10000 #在60秒后,若至少有1000个key发生变化,则dump内存快照
优势:
1).整个redis数据库将只包含一个文件
2).恢复而言,将一个单独的文件压缩后再转移到其他存储介质即可
3).性能最好,redis服务进程持久化时,它只fork出子进程,由该子进程完成这些持久化的工作,避免服务执行IO操作.
4).相比于aof机制,数据集很大,rdb启动效率会更高.
缺点:
1).因rdb方式下,是指定几秒后keys修改将内存中数据集保存到磁盘,若在此过程中down机出现,来不及数据写磁盘而导致数据丢失
2).rdb通过fork子进程来协助完成数据持久化,因此,当数据集较大时,可能会导致整个服务器停止几百毫秒。


2.Append-only file(aof)的方式:
以日志的形式记录服务器处理的每一个写操作(增加,修改,删除数据记录),在redis服务器启动之初会读取该文件来
重构建数据库,保证启动后数据库的数据是完整的.
优势:
1).该机制有更高的数据安全性,它有3种同步策略:每秒同步,每修改同步和不同步(由os同步)。但是,每秒同步也是异步
完成的,其效率也非常高,那么这种情况,在down机时,会丢失一秒钟之内修改的数据.而每修改同步,每次发生数据变化都会
被立即记录到磁盘中.这种效率上是最低的.至于无同步,效率高,但是不安全.
2).对日志的写入操作采用append模式,即使在写入过程中出现down机,也不会破坏日志文件中已经存在的内存.只是本次操作
写一部分数据,不用担心,在redis下一次启动之前,通过redis-check-aof工具来帮助我们解决数据一致性问题.
3).若日志过大,redis可以自动启用rewrite机制,即,redis以append模式不断修改数据写入到老的磁盘文件中,同时,redis还会
创建一个新的文件用于记录此期间有哪些修改命令被执行.故在进行rewrite切换时可以更好的保证数据的安全性.
4).aof包含数据修改,增加,删除记录,可以通过该文件完成数据的重建.
缺点:
1).相对于数据量,aof很大
2)同步策略不同,aof运行效率慢于rdb

aof配置:
appendonly yes #启用aof持久化方式,有3种选择
appendfsync always   #每次有数据修改发生时都会写入aof文件
appendfsync everysec #默认选择,每秒钟同步一次
appendfsync no       #从不同步,高效但数据不会被持久化

rdb和aof方式区别:
1.持久化策略不同
2.数据量大小不同
3.记录的数据集不同
4.恢复方式不同
因快照方式是一定间隔时间做一次,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改;
aof比快照方式有更好的持久性,因在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文
件中,当redis重启时,会通过重新执行文件中保存的写命令,在内存中重建整个数据库的内存.

redis数据备份:
在redis中可以通过copy方式在线备份正在运行的redis数据库。是因rdb文件一旦被生成之后就不会再被修改,redis每次将最新的

数据dump到一个临时文件中,之后利用rename函数原子性的将临时文件改名为原有的数据文件名。故,任意时刻copy数据文件是安全和一致的,我们可以cron job方式定时备份redis数据文件,将备份文件copy到安全磁盘上.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值