redis 持久化

redis 提供了那些持久化

  1. RDB 持久化:
    该机制是指在指定的时间间隔内将内存中的数据集快照写入到磁盘

  2. AOF持久化
    该机制将以日志的形式记录服务器所处理的每一个写操作。在redis 启动之初 就会读取该文件来重新构建数据库, 以保证启动后的数据库中的数据是完整的

  3. 无持久化
    可以通过配置的方式禁用持久化功能, 这样我们就可以将redis 视为一个功能加强版的memcached
  4. 同时使用应用AOF RDB

RDB 优势和劣势

优势
1. 一旦 采用这个方式, 那么你的整个redis数据库将只包含一个文件。 这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。
2. 对于灾难恢复而言, RDB 是非常不错的选择。 因为我们可以轻松的将一个文件压缩后再转移到其他的存储介质上面。
3. 性能最大化,对于redis服务进程而言, 在开始持久化时候她唯一需要做的就是fork 出子进程, 之后再由子进程完成这些持久化的工作, 这样就极大的避免了服务进程执行IO 操作。
4. 相比aof 机制, 如果数据集很大,RDB 的启动效率会非常高

劣势
1. 如果想保证数据的高可用, 即最大限度的避免数据丢失,那么RDB 将不是一个好的选择。因为系统在定时持久化之前出现宕机情况, 此时还没有写入到磁盘的数据都将消失。
2. 由于RDB 是通过fork 子进程来协助完成数据持久化的工作。因此如果数据集比较大的时候, 可能会导致整个服务器停止服务好几十毫秒 甚至一秒钟。

AOF 机制的优势和劣势

优势
1. 该机制可以带来更高的数据安全性, 即 数据持久性。Redis 中提供的3中同步策略,即每秒同步, 每修改同步和不同步。 事实上 每秒同步也是异步完成的。效率也是非常高的所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。
2. 该机制是对日志文件的写入是append 模式。因此在写入的过程中出现宕机的情况, 也不会破坏日志文件中已经存在的内容。如果我们在本次操作只写入了一半数据系统就崩溃啦。不用担心只需要在启动redis 之前 可以通过redis-check-aof 工具来解决 数据一致性的问题。
3. 如果日志过大,redis可以自动启用rewrite 机制。即redis 以append的模式不断的将修改数据写入到老的磁盘文件, 同时redis还会创建一个新的文件用于记录次期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性
4. AOF 包含一个格式清晰 , 易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。
劣势
1. 对于相同数量的数据集而言,AOF文件通常要大于RDB文件
2. 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效

其他

  1. Snapshotting:
    缺省情况下,Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.conf文件之后,我们搜索save,可以看到下面的配置信息:
900秒(15分钟)之后,如果至少有1key发生变化,则dump内存快照。

save 900 1

300秒(5分钟)之后,如果至少有10key发生变化,则dump内存快照。

save 300 10

60秒(1分钟)之后,如果至少有10000key发生变化,则dump内存快照。

save 60 10000

  1. Dump快照的机制:
    1). Redis先fork子进程。
    2). 子进程将快照数据写入到临时RDB文件中。
    3). 当子进程完成数据写入操作后,再用临时文件替换老的文件。

  2. AOF文件:
    上面已经多次讲过,RDB的快照定时dump机制无法保证很好的数据持久性。如果我们的应用确实非常关注此点,我们可以考虑使用Redis中的AOF机制。对于Redis服务器而言,其缺省的机制是RDB,如果需要使用AOF,则需要修改配置文件中的以下条目:
    将appendonly no改为appendonly yes
    从现在起,Redis在每一次接收到数据修改的命令之后,都会将其追加到AOF文件中。在Redis下一次重新启动时,需要加载AOF文件中的信息来构建最新的数据到内存中。

    1. AOF的配置:
      在Redis的配置文件中存在三种同步方式,它们分别是:
      appendfsync always #每次有数据修改发生时都会写入AOF文件。
      appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
      appendfsync no #从不同步。高效但是数据不会被持久化。

    2. 如何修复坏损的AOF文件:
      1). 将现有已经坏损的AOF文件额外拷贝出来一份。
      2). 执行”redis-check-aof –fix ”命令来修复坏损的AOF文件。
      3). 用修复后的AOF文件重新启动Redis服务器。

    3. Redis的数据备份:
      在Redis中我们可以通过copy的方式在线备份正在运行的Redis数据文件。这是因为RDB文件一旦被生成之后就不会再被修改。Redis每次都是将最新的数据dump到一个临时文件中,之后在利用rename函数原子性的将临时文件改名为原有的数据文件名。因此我们可以说,在任意时刻copy数据文件都是安全的和一致的。鉴于此,我们就可以通过创建cron job的方式定时备份Redis的数据文件,并将备份文件copy到安全的磁盘介质中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值