博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Redis 持久化拥有以下三种方式:

Posted on 2021-02-20 11:25  迷途知返小新人  阅读(238)  评论(0)    收藏  举报

Redis 持久化拥有以下三种方式:

  • 快照方式(RDB, Redis DataBase)

RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发

  • 文件追加方式(AOF, Append Only File)

记录所有的操作命令,并以文本的形式追加到文件中;

  • 混合持久化方式,

Redis 4.0 之后新增的方式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能减低数据丢失的风险。

RDB 优缺点

优点

  • RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据 快照。非常适用于备份,全量复制等场景。
  • 与 AOF 格式的文件相比,RDB 文件可以更快的重启。
  • RDB 对灾难恢复非常有用,它是一个紧凑的文件,可以更快的传输到远程服务器进行 Redis 服务恢复

缺点

  • RDB方式数据没办法做到实时持久化/秒级持久化,RDB只能保存某个时间间隔的数据,如果在这个期间Redis故障了,就会丢失一段时间的数据。
  • RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运 行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高。
  • AOF 优点

    AOF 持久化保存的数据更加完整,AOF 提供了三种保存策略:每次操作保存、每秒钟保存一次、跟随系统的持久化策略保存,其中每秒保存一次,从数据的安全性和性能两方面考虑是一个折中的选择,也是 AOF 默认的策略,即使发生了意外情况,最多只会丢失 1s 钟的数据;

    AOF 采用的是命令追加的写入方式,所以不会出现文件损坏的问题,即使由于某些意外原因,导致了最后操作的持久化数据写入了一半,也可以通过 redis-check-aof 工具轻松的修复;

    AOF 持久化文件,非常容易理解和解析,它是把所有 Redis 键值操作命令,以文件的方式存入了磁盘。即使不小心使用 flushall 命令删除了所有键值信息,只要使用 AOF 文件,删除最后的 flushall 命令,重启 Redis 即可恢复之前误删的数据。

    AOF 缺点

    对于相同的数据集来说,AOF 文件要大于 RDB 文件;

    在 Redis 负载比较高的情况下,RDB 比 AOF 性能更好;

    RDB 使用快照的形式来持久化整个 Redis 数据,而 AOF 只是将每次执行的命令追加到 AOF 文件中,因此从理论上说,RDB 比 AOF 更健壮。

  • 混合持久化优缺点

    优点

    混合持久化结合了 RDB 和 AOF 持久化的优点,开头为 RDB 的格式,使得 Redis 可以更快的启动,同时结合 AOF 的优点,有减低了大量数据丢失的风险。

    缺点:

    AOF 文件中添加了 RDB 格式的内容,会使得 AOF 文件的可读性会很差,不容易阅读;
    如果开启混合持久化,就必须使用Redis 4.0 以及之后版本

  • https://blog.csdn.net/weixin_38361347/article/details/104858585
  • 在Redis中字符串类型的Value最多可以容纳的数据长度是512M
  • String作为数值操作时的注意事项
    1. string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算
    2. redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
    3. 按数值进行操作的数据,如果原始数据不能转成数值,或超过了redis数值上线范围,将会报错。9223372036854775807 (java中long型数据最大值,Long.MAX_VALUE)