千家信息网

什么是Redis持久化

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容介绍了"什么是Redis持久化"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!RDB:快照形式
千家信息网最后更新 2025年02月05日什么是Redis持久化

本篇内容介绍了"什么是Redis持久化"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  • RDB:快照形式是直接把内存中的数据保存到一个 dump 文件中,恢复时是将快照文件直接读到内存里。

  • AOF:把所有的对Redis的服务器进行修改的命令都存到一个文件里,命令的集合。

Redis默认是快照RDB的持久化方式

RDB

RDB 有两种触发方式,分别是自动触发和手动触发

  • 自动触发

    在 redis.conf 配置文件中的 SNAPSHOTTING 下,加上如下配置:

    save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存


    当然如果你只是用Redis的缓存功能,不需要持久化,那么你可以注释掉所有的 save 行来停用保存功能,也可以使用`redis-cli config set save ""命令

  • 手动触发

    手动触发Redis进行RDB持久化的命令有两种:

    1. save

      该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止

    2. bgsave

      执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短

基本上 Redis 内部所有的RDB操作都是采用 bgsave 命令

恢复数据

将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可,redis就会自动加载文件数据至内存了。Redis 服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止。

获取 redis 的安装目录可以使用 config get dir 命令

RDB优势与劣势

优势:

  • RDB是一个非常紧凑(compact)的文件,它保存了redis 在某个时间点上的数据集。这种文件非常适合用于进行备份和灾难恢复

  • 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作

  • RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快

劣势:

  • RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作(内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑),频繁执行成本过高(影响性能)

  • RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题(版本不兼容)

  • 在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失)

AOF

AOF配置

在 redis.conf 配置文件的 APPEND ONLY MODE 下:

  • appendonly no 默认配置,表示不开启AOF持久化

  • appendfilename "appendonly.aof" AOF日志文件名

  • appendfsync: aof持久化策略的配置;

    • no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快,但是不太安全;

    • always表示每次写入都执行fsync,以保证数据同步到磁盘,效率很低;

    • everysec表示每秒执行一次fsync,可能会导致丢失这1s数据。通常选择 everysec ,兼顾安全性和效率

AOF文件恢复

重启 Redis 之后就会进行 AOF 文件的载入

AOF重写

AOF文件不断变大,Redis为了解决这种情况,在文件大小达到一定阈值后,进行AOF重写,对AOF文件进行压缩,只保留可以恢复数据的最小指令集

举个例子:

sadd key "A" "B" "C"

如果不重写会保留三条sadd指令,但是重写只会保留一条

  • 执行AOF重写的时候,会直接读取服务器内存的所有键值对,不是对之前的AOF文件进行整理

  • 子进程进行 AOF 重写期间,服务器进程(父进程)可以继续处理其他命令

  • 子进程带有父进程的数据副本,使用子进程而不是线程,可以在避免使用锁的情况下,保证数据的安全性

主进程和子进程之前可能会产生数据不一致,解决方案:

Redis 服务器设置了一个 AOF 重写缓冲区,这个缓冲区是在创建子进程后开始使用,当Redis服务器执行一个写命令之后,就会将这个写命令也发送到 AOF 重写缓冲区。当子进程完成 AOF 重写之后,就会给父进程发送一个信号,父进程接收此信号后,就会调用函数将 AOF 重写缓冲区的内容都写到新的 AOF 文件中

AOF优缺点

优点:

  • AOF 持久化的方法提供了多种的同步频率,即使使用默认的同步频率每秒同步一次,Redis 最多也就丢失 1 秒的数据而已

  • AOF 文件使用 Redis 命令追加的形式来构造,因此,即使 Redis 只能向 AOF 文件写入命令的片断,使用 redis-check-aof 工具也很容易修正 AOF 文件

  • AOF 文件的格式可读性较强,这也为使用者提供了更灵活的处理方式。例如,如果我们不小心错用了 FLUSHALL 命令,在重写还没进行时,我们可以手工将最后的 FLUSHALL 命令去掉,然后再使用 AOF 来恢复数据。

缺点:

  • 对于具有相同数据的的 Redis,AOF 文件通常会比 RDF 文件体积更大

  • 在 Redis 的负载较高时,RDB 比 AOF 具好更好的性能保证

  • AOF可能存在bug

"什么是Redis持久化"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

文件 进程 数据 命令 服务 服务器 快照 配置 内存 同步 方式 格式 版本 缓冲区 过程 保证 处理 缓冲 安全 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 无法关闭安全中心服务器 数据库表和文件互换 数据库中地址怎么拆分为省市 华为服务器电源脱机启动方法 邢台网络存储服务器 丁甲网络技术服务有限公司 软件开发面试讲什么干货 临沂凯宇网络技术服务有限公司 ios访问服务器 刘印祥网络安全 大型数据库中安全运算 汽车车载网络技术第三版答案 下拉框接收数据库数据显示 上海淘智互联网科技有限公司 大数据库最新报告 阿里云云服务器操作教程 网络安全我来说主题班会教案 魅族怎么取消锁定数据库 系统应用软件开发就业前景 网络安全专题五百字 分布式内存流数据库技术 天津多功能软件开发单价 数据库系统原理简答doc下载 大兴区推广软件开发热线 四川怎么考软件开发证书 开发网课软件开发需求 架设外网页游服务器 hive数据库表重命名语句 迅雷服务器带宽投入 浪潮英信服务器拓扑图
0