热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

redis(三)redis持久化

目录持久化方式RDBRDB工作机制保存策略RDB属性设置触发持久化的方式优缺点AOF保存策略AOF属性设置AOF文件的修复AOF的rewrite机制优缺点应用场景持久化方式redi

目录



  • 持久化方式

  • RDB

    • RDB工作机制

    • 保存策略

    • RDB属性设置

    • 触发持久化的方式

    • 优缺点



  • AOF

    • 保存策略

    • AOF属性设置

    • AOF文件的修复

    • AOF的rewrite机制

    • 优缺点



  • 应用场景


持久化方式

redis主要工作在内存中。内存本省就不是一个持久化的设备,断电后数据会清空。但是redis提供了持久化方式。个人看来 这是redis提供了一种备份机制,可以将内存中的数据持久化到磁盘上,有利于这些热点数据的备份恢复和迁移。

redis提供了两种持久化方式,分别是RDB 和AOF

RDB持久化方式能够在指定的时间间隔对数据进行快照存储

AOF持久化方式记录每次对服务器的写操作,当服务器重启的时候会重新执行这些命令来恢复原始数据,个人认为类似于MySQL的binlog日志


RDB

RDB:在指定的时间间隔内将内存中的数据写入磁盘,它恢复时是将文件读取到内存中。

RDB是默认开启的


RDB工作机制

工作机制:每隔一段时间,就会把内存中的数据保存到硬盘上的指定文件中。

RDB在持久化时会单独创建一个fork子进程来进行持久化操作,会先将数据写入到一个临时文件中,等到持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。

整个过程中,主进程work是不会进行任何IO操作的,这就确保了极高的性能。如果需要进行大规模的数据恢复,RDB性能比AOF好很多。


保存策略

save 900 1 900 秒(15分钟)内如果至少有 1 个 key 的值变化,则保存

save 300 10 300 秒(5分钟)内如果至少有 10 个 key 的值变化,则保存

save 60 10000 60 秒(1分钟)内如果至少有 10000 个 key 的值变化,则保存

save "" 是禁用RDB模式


RDB属性设置










































属性含义默认
save保存策略默认开启三个 也就是15分钟1个key则保存
dbfilenameRDB 快照文件名dump.rdb
dirRDB 快照保存的目录必须是一个目录,不能是文件名。最好改为固定目录。默 认为./代表执行 redis-server 命令时的当前目录!
stop-writes-on-bgsave-error是否在备份出错时,继续接受写 操作如果用户开启了 RDB 快照功能,那么在 redis 持久化数据 到磁盘时如果出现失败,默认情况下,redis 会停止接受所 有的写请求
rdbcompression对于存储到磁盘中的快照,可以 设置是否进行压缩存储。如果是的话,redis 会采用 LZF 算法进行压缩。如果你 不想消耗 CPU 来进行压缩的话, 可以设置为关闭此功能,但是存储在磁盘上的快照会 比较大。
rdbchecksum是否进行数据校验在存储快照后,我们还可以让 redis 使用 CRC64 算法 来进行数据校验,但是这样做会增加大约 10%的性能消耗, 如果希望获取到最大的性能提升,可以关闭此功能。

触发持久化的方式

1、基于自动保存策略

2、执行save,或者bgsave命令,执行时save时是阻塞状态

3、执行 shutdown 命令时,也会主动地备份数据。

4、执行 flushdb 命令,也会产生 dump.rdb,但里面是空的,没有意义


优缺点

优点

1、RDB是一个文件,保存了某个时间点的数据集,非常适合用于数据集的备份。

2、压缩格式 恢复速度快

缺点

1、(可能有 但是我没找到)没有设置固定大小的策略,随着业务量的增加 只能任由rdb文件增大

2、不是实时的,可能会丢数据,操作比较重。

3、fork时内存中的数据被克隆了一份,大概2倍的膨胀。

在这里插入图片描述

备份脚本

每小时备份一次rdb文件
crontab -e
0 */1 * * * cp /etc/redis/dump.rdb /etc/redis/dump.rdb`date +%Y%m%d%H`

AOF

1、AOF是以日志的形式来记录每个写操作,将每一次对数据进行修改,都会把新建、修改数据的命令保存到指定文件中。redis重新启动时读取这个文件,重新执行新建、修改数据的命令恢复数据。

2、默认不开启,需要手动启动

3、AOF 在保存命令的时候,只会保存对数据有修改的命令,也就是写操作!

4、当 RDB 和 AOF 存的不一致的情况下,按照 AOF 来恢复。因为 AOF 是对 RDB 的补充。备份周期更短,也就更可靠。


保存策略

appendfsync always:每次产生一条新的修改数据的命令都执行保存操作;效率低,但是安全!

appendfsync everysec:每秒执行一次保存操作。如果在未保存当前秒内操作时发生了断电,仍然会导致一部分数据丢失(即 1 秒钟的数据)。

appendfsync no:从不保存,将数据交给操作系统来处理。更快,也更不安全的选择。推荐(并且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略可以兼顾速度和安全性。


AOF属性设置















































属性含义默认
appendonly是否开启 AOF 功能默认是关闭的
appendfilenameAOF 文件名称
appendfsyncAOF 保存策略官方建议 everysec
no-appendfsync-on-rewrite在重写时,是否执行保存策略执行重写,可以节省 AOF 文件的体积;而且在恢复的时候 效率也更高。
auto-aof-rewrite-percentage重写的触发条件当目前 aof 文件大小超过上一次重写的 aof 文件大小的百分 之多少进行重写
auto-aof-rewrite-min-size设置允许重写的最小 aof 文件 大小避免了达到约定百分比但尺寸仍然很小的情况还要重写
aof-load-truncated截断设置如果选择的是 yes,当截断的 aof 文件被导入的时候,会自 动发布一个 log 给客户端然后 load

AOF文件的修复

如果 AOF 文件中出现了残余命令,会导致服务器无法重启。此时需要借助 redis-check-aof 工具来修复!

命令: redis-check-aof –fix 文件


AOF的rewrite机制

AOF采用文件追加方式,文件会越来越大,为了避免出现这种情况,新增加了重写机制,当AOF文件的大小超过所设定的阈值时,redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。可以使用命令bgrewriteaof

重写原理

AOF文件持续增长而过大时,会fork出一条新进程来将文件重新(也就是先写临时文件最后rename),遍历新进程的内存中数据,每条记录有一条set语句。重写AOF文件的操作,并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件,这点和RDB快照相似。

触发机制

redis会记录上次重写时AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大小大于64M时触发。


优缺点



1、备份机制更稳健,丢数据概率更低

2、可读的日志文本,通过操作AOF文件,可以处理误操作。



1、比起RDB占用更多的磁盘空间

2、恢复备份速度要慢

3、每次读写都同步的话,有一定的性能压力

两种备份方式的有优先级

如果同时开启两种持久化方式:

在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

RDB的数据不是实时的,同时使用两者时服务器重启也只会找AOF文件。那要不要只用AOF呢?

也不建议,因为RDB更适合备份数据库,进行快速重启。


应用场景

一、服务器卡死或者redis卡死

如果数据不是很重要 建议直接使用RDB恢复。

恢复步骤:

1、移动AOF文件(因为默认是从AOF文件reload)

2、检查RDB文件 进行redis restart 重新reload RDB文件

二、人为误删除部分数据

数据不重要:删除了就删除吧

数据重要:AOF恢复

三、人为误删除全部数据

数据不重要:使用crontab 定时备份任务 备份的RDB文件进行恢复

数据重要:使用AOF的方式,vim appendonly.aof文件,将flushall命令删除后进行重启redis

四、误删除AOF文件

误删除了 就是没了。只能从现在再开始记录。

五、误删除RDB文件

save \bgsave触发条件会再次自动生成dump.rdb 是无所谓的

因为你不会,所以你才会---大司马



推荐阅读
  • 本文详细介绍了在 Windows 7 系统中配置 Nginx 1.10.3 和 PHP 7.1.1 NTS 的步骤,包括修改 PHP 配置文件、处理依赖项以及创建批处理脚本启动和停止服务。重点解释了如何解决常见的运行时错误。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 在项目中使用 Redis 时,了解其不同架构模式(如单节点、主从复制、哨兵模式和集群)对于确保系统的高可用性和扩展性至关重要。本文将详细探讨这些模式的特点和应用场景。 ... [详细]
  • win10个性化打不开如何解决
    本篇内容主要讲解“win10个性化打不开如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win ... [详细]
  • 本文探讨了大型服务端开发过程中常见的几个误区,包括异步任务处理不当、日志同步模式使用、网络操作未设置超时、缓存命中率及响应时间未统计、单一缓存模式、分布式缓存加锁不当以及团队管理上的误区,旨在帮助开发者避免这些常见错误。 ... [详细]
  • MySQL InnoDB Double Write机制详解
    本文深入探讨了MySQL InnoDB存储引擎的Double Write技术,该技术通过在内存和磁盘上创建数据页的副本,确保了部分写失效(Partial Page Write)情况下的数据完整性和可靠性。同时,文章介绍了InnoDB以页为单位进行读取和更新的机制,并详细解析了Double Write的工作原理。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 在使用Node.js运行时环境的Next.js应用程序部署过程中,遇到了与目录文件数量相关的错误。本文将详细探讨该问题及其解决方案。 ... [详细]
  • 本文详细介绍如何使用CSS自定义HTML5视频播放器的样式,涵盖常见属性及跨浏览器兼容性问题。发布时间:2020-09-14 14:46:29;来源:亿速云;阅读量:58;作者:小新。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • 福克斯新闻数据库配置失误导致1300万条敏感记录泄露
    由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ... [详细]
  • Linux系统中Java程序Too Many Open Files问题的深入解析与解决方案
    本文详细分析了在Linux环境下运行的Java应用程序中可能出现的“Too many open files”异常现象,探讨其成因及解决方法。该问题通常出现在高并发文件访问或大量网络连接场景下,对系统性能和稳定性有较大影响。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
author-avatar
Mayuki命_103
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有