Redis模块五:持久化

目录

持久化的定义

Redis持久化的方式

持久化策略设置

[RDB VS AOF VS 混合持久化](#RDB VS AOF VS 混合持久化)

[RDB 优点](#RDB 优点)

[RDB 缺点](#RDB 缺点)

[AOF 优点](#AOF 优点)

[AOF 缺点](#AOF 缺点)

混合持久化优点

混合持久化缺点


持久化的定义

所谓的持久化就是将数据从内存保存到磁盘 的过程,它的**⽬的就是为了防⽌数据丢失** 。因为内存中的数据在服务器重启之后就会丢失,⽽磁盘的数据则不会,因此为了系统的稳定起⻅,我们需要将数据进⾏持久化。同时持久化功能⼜是 Redis 和 Memcached 最主要的区别之⼀,因为 Redis ⽀持持久化⽽Memcached 不⽀持。

Redis持久化的方式

1.快照⽅式 (RDB, Redis DataBase)将某⼀个时刻的内存数据,以⼆进制的⽅式写⼊磁盘;
2.⽂件追加⽅式 (AOF, Append Only File),记录所有的操作命令,并以⽂本的形式追加到⽂件中;
3.混合持久化⽅式 ,Redis 4.0 之后新增的⽅式 ,混合持久化是结合了 RDB 和 AOF 的优点,在写⼊的时候,先把当前的数据以 RDB 的形式写⼊⽂件的开头,再将后续的操作命令以 AOF 的格式存⼊⽂件,这样既能保证 Redis 重启时的速度,⼜能减低数据丢失的⻛险。

持久化策略设置

可以在 redis-cli 命令⾏中执⾏ config set aof-use-rdb-preamble yes 来开启混合持久化,当

开启混合持久化时 Redis 就以混合持久化⽅式来作为持久化策略;当没有开启混合持久化的情况下,使⽤ config set appendonly yes 来开启 AOF 持久化的策略,当 AOF 和混合持久化都没开启的情况下默认会是 RDB 持久化的⽅式。

RDB VS AOF VS 混合持久化

RDB 优点

  • RDB 的内容为**⼆进制的数据**,占⽤内存更⼩,更紧凑,更适合做为备份⽂件;
  • RDB 对灾难恢复⾮常有⽤,它是⼀个紧凑的⽂件,可以更快的传输到远程服务器进行 Redis 服务恢复;
  • RDB 可以更⼤程度的提⾼ Redis 的运⾏速度,因为每次持久化时 Redis 主进程都会 fork() ⼀个⼦进程,进⾏数据持久化到磁盘,Redis 主进程并不会执⾏磁盘 I/O 等操作;
  • 与 AOF 格式的⽂件相⽐,RDB ⽂件可以更快的重启。

RDB 缺点

  • 因为 RDB只能保存某个时间间隔的数据,如果中途 Redis 服务被意外终⽌了,则会丢失⼀段时间内的 Redis 数据;
  • RDB 需要经常 fork() 才能使⽤⼦进程将其持久化在磁盘上。如果数据集很⼤,fork() 可能很耗时,并且如果数据集很⼤且 CPU 性能不佳,则可能导致 Redis 停⽌为客户端服务⼏毫秒甚⾄⼀秒钟。

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 ⽂件的可读性变得很差;
  • 兼容性差 ,如果开启混合持久化,那么此混合持久化 AOF ⽂件,就不能⽤在 Redis 4.0 之前版本了
相关推荐
这个DBA有点耶1 小时前
连接数没满,应用却连不上数据库——TCP backlog溢出与somaxconn的隐藏限制
数据库·mysql·代码规范
yunlaodacom1 小时前
华为云国际站服务代理商:BMS数据库延迟突然升高?磁盘I/O、网络与CPU排查方法
网络·数据库·华为云
SelectDB技术团队1 小时前
Apache Doris 的时间旅行与快照能力:边界、替代路径与可落地操作
数据库·apache·数据湖·apache doris·数据库选型·多模湖仓
2601_961963382 小时前
电子合同检索与全文搜索怎么测、怎么选:六个指标 + 五家平台对比 + 八个自测问题
数据库·后端·python·django·智能合约
zhangjw342 小时前
1-3 PostgreSQL 架构模型:实例、数据库、Schema 模式、表空间完整概念
数据库·postgresql·架构
小羊没烦恼!2 小时前
C#综合揭秘——Entity Framework 并发处理详解
java·开发语言·前端·javascript·数据库·mysql·c#
Databend2 小时前
周年庆结束了,湖仓为什么还在高消费?
大数据·数据库·agent
笃行3502 小时前
数据集成软件里最贵的一行字,叫“用同步工具做增量同步“
数据库
吴声子夜歌2 小时前
Docker入门与实战——Etcd(高可用的键值数据库)
数据库·docker·etcd
Pniubi3 小时前
力扣146.LRU缓存机制
算法·leetcode·缓存