Redis学习之持久化

Redis学习之持久化简介 持久化是将内存中的瞬时数据,转换为存储在磁盘上的持久数据。redis是一个将数据存储在内存中的数据库,这也是它高效率的原因之一。但是将数据存储在内存,如果遇到突发事件,可能会造成数据的丢失。所…

Redis学习之持久化

简介

持久化是将内存中的瞬时数据,转换为存储在磁盘上的持久数据。redis是一个将数据存储在内存中的数据库,这也是它高效率的原因之一。但是将数据存储在内存,如果遇到突发事件,可能会造成数据的丢失。所以我们需要将数据持久化,等下次redis启动时,再次将数据加载进去即可。

RDB和AOF

redis的持久化可以分为两类,一种是快照模式的RDB,一种是日志模式的AOF。

RDB

命令

save:手动保存一次数据

bgsave:手动启动后台存储,不会立刻执行。

配置

dbfilename dump.rdb:设置数据库持久话文件名称

dir:数据文件存储位置

rdbcompression yes:持久化数据是否启用压缩,默认启用。采用lzf压缩。关闭而已节省cpu时间,但是文件会巨大。

rdbchecksum yes:设置是否对rdb文件进行校验。

stop-writes-on-basave-error yes:后台存储的过程中,如果出现错误现象,是否停止保存操作,默认是开启的。

save second changes:限定时间内,key的变化数量达到指定数量,则进行持久化。second:时间 changes:变化数量

工作原理

save命令会将数据记录到 .rdb的文件当中,当下次redis启动时会自动加载这个文件。

因为redis是单线程的,所以当我们执行一个命令的时候,其他命令只能是阻塞状态。因为磁盘的IO是很慢的,在数据量大的情况下我们使用save指令来持久化数据时,可能会造成大量的其他命令造成阻塞,直到整个RDB完毕才会顺序执行其他命令。所以生产环境不会使用save命令。

解决方案

将RDB的过程放到后台执行,不会和其他命令一同放入“任务队列”中。

bgsave:以后台方式进行保存操作,但是不是立刻执行。

当我们执行bgsave命令时,redis会使用它的fork函数启动一个子进程来进行数据的持久化。bgsave是针对save命令阻塞问题进行的优化,建议关于RDB的操作。都使用bgsave

优缺点

  • 缺点

  • RDB是一个紧凑压缩的二进制文件,存储效率高

  • RDB内存储的是redis某一个时间点的数据快照,非常适合数据备份,全量复制等场景。

  • RDB恢复数据要比AOF快很多。

  • 应用:服务器中每X小时,执行一次bgsave 并且将备份文件拷贝到远程机器,用于灾难恢复。

  • 优点

  • RDB无论是使用执行指令还是使用配置,都无法做到实时持久化,具有可能丢失一部分数据的可能性。

  • bgsave执行每次都要创建一个新子进程,会牺牲一些性能,浪费一些内存。

  • Redis各个版本中的RDB文件格式未统一,可能存在不兼容的情况。

AOF

AOF(append only file)以独立的日志方式记录每次操作影响数据的命令,重启时再重新执行一遍AOF文件中的命令以达到恢复数据的效果。与RDB相比可以描述为”该记录数据为记录数据产生的过程“

AOF解决了持久化的实时性,是主流的方式。

工作过程

在使用AOF时,redis会将影响数据的命令首先记录到一个缓存区域,当到达条件时写入到日志文件当中。

AOF写策略

  • always

    每执行一次影响数据命令,就同步到日志文件当中,数据零误差,性能地下。当你的执行命令很快的时候,需要不停的进行io操作,所以这个不常用。

  • everysec

    每秒将缓存区中的执行同步到日志文件当中,数据准确性高,性能较高。在系统宕机时,最坏会丢失1秒的数据。这个也是默认的配置。

  • no

    系统控制,由操作系统控制每次同步到日志文件的的时间,过程不可控制。

配置

  • 开启AOF

    • appendonly yes|no:开启AOF 功能,默认为不开启。
  • 配置策略

    • appendfsync:上边三种策略
  • 配置自动重写

    • auto-aof-rewrite-min-size:当当前的AOF文件尺寸达到这个值,则进行重写 aof_current_zie>auto-aof-rewrite-min-size

    • auto-aof-rewrite-percentage:当当前的AOF文件尺寸增长的百分比达到这个值,则重写

    	aof_current_size-aof_base_size/aof_base_size>auto-aof-rewrite-percentage
    

    代码100分

AOF重写

随着命令不断的写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF重写是将Redis内部的数据转化为写命令同步到新AOF文件的过程,简单言就是将若干数据转换为命令存储到AOF文件中。

作用

  • 降低磁盘占用

  • 提高持久化效率,降低写时间。

  • 提高恢复效率

AOF规则

  • 超时的数据不会再同步到AOF文件当中。

  • 忽略无效指令,重写时使用内部数据直接生成。

  • 合并同一条数据修改的命令 例如 lpush list1 1,lpush list1 2,lpush list1 3—->>> lpush list1 1 2 3。为了防止数据量过大,对客户端缓冲造成溢出,对于list,set,hash,zset最大只可以一次写入64个数据。

命令

  • bgrewriteaof:手动重写,后台重写AOF,当我们执行这个命令时,redis会调用fork函数创建子进程进行,将数据转换为命令覆盖AOF文件。

AOF和RDB区别

持久化方式 RDB AOF
占用存储空间 小(数据级:压缩) 大(指令级:重写)
存储速度 慢,数据量大时
恢复速度
数据安全性 会丢失数据 依策略
资源消耗 高/重量级 低/轻量级
启用优先级

AOF和RDB的选择

  • 对数据非常敏感,建议使用AOF方案,因为持久化策略使用everysecond,每秒存储一次。该策略在性能上仍然可以保持很好的效果,最坏的情况也仅仅丢失1秒的数据。

  • 数据呈现阶段有效性,建议使用RDB方案,数据可以良好做到阶段内无丢失(该阶段值运维手工维护的阶段),且恢复速度快,阶段点数据使用RDB。

  • 如果不能承受分钟以内的数据丢失,对业务数据非常敏感,则使用AOF

  • 如果能承受分钟以内的数据丢失,且追求大数据集的快速恢复,选用RDB

  • 灾难恢复选择RDB

  • 双保险策略,同时开启RDB和AOF。重启后,Redis会首先使用AOF恢复数据,降低数据丢失的量。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8782.html

(0)
上一篇 2023-02-22
下一篇 2023-02-22

相关推荐

  • 电脑换硬盘要重装系统吗[亲测有效]

    电脑换硬盘要重装系统吗[亲测有效]不少用户想知道电脑换硬盘了,还要重装系统吗? 一、如果这个硬盘是全新的,换到另一台主机上,这时是需要重装系统的,可以使用U盘来安装系统。 二、如果硬盘里已有系统,而且系统能够正常使用,换到另一台主机…

    2023-04-10
    162
  • Python os.path join函数的用法及示例说明

    Python os.path join函数的用法及示例说明在Python的os.path模块中,join()函数被广泛应用于路径的组合,它使用操作系统特定的分隔符将多个路径组合成一个。在不同的操作系统中,路径的分隔符是不同的,在Windows中是”\\”,在Linux和Unix中是”/”。使用os.path.join()函数,我们可以轻松地处理这些不同的细节,生成可以在不同操作系统上运行的路径。

    2024-03-06
    97
  • Python编译器探秘

    Python编译器探秘Python 编译器是一种将 Python 代码转化为中间代码或机器码的程序。Python 支持多种不同的编译器,包括 CPython、Jython、IronPython 等等。不同的编译器实现了不同的编译方式和优化策略,因此它们的性能、可移植性和跨平台能力都有所不同。

    2024-05-17
    62
  • 如何在cmd中运行Python程序

    如何在cmd中运行Python程序Python已成为当前最受欢迎和使用的编程语言之一。如今,它在各种领域中的使用越来越广泛,包括Web应用程序、数据科学、机器学习等。接下来,我们将介绍如何在Windows操作系统的命令提示符(cmd)下运行Python程序。

    2024-09-17
    25
  • anaconda与python的区别

    anaconda与python的区别Python 是一个开源、高级编程语言,它比许多其他编程语言更容易学习,同时也提供许多扩展库和框架。Anaconda 是一个开源的 Python 发行版,用于科学计算和数据分析的环境。

    2024-05-06
    80
  • Python Strip Diagram Template – 优化代码可读性和调试效率的利器

    Python Strip Diagram Template – 优化代码可读性和调试效率的利器Python是一种高级编程语言,广泛应用于各种领域,如Web开发、人工智能、数据分析与科学计算等。在编写代码时,我们不仅要追求程序的功能性,还要注重代码的可读性、可维护性以及调试效率。Python Strip Diagram Template就是一种优化代码可读性和调试效率的利器。

    2024-01-16
    93
  • 使用Python cmd模块打造控制台应用

    使用Python cmd模块打造控制台应用有时候我们需要自己开发一个控制台应用程序,以实现某些特定的功能。比如说开发一个命令行查询天气的工具,或是仅用于本地运行的代码调试工具,等等。在这种情况下,Python中的cmd模块就可以派上用场。

    2024-05-19
    70
  • Mybatis检查SQL注入[通俗易懂]

    Mybatis检查SQL注入[通俗易懂]Mybatis 的 Mapper.xml 语句中 parameterType 向SQL语句传参有两种方式: { } 和 ${ }。 使用 { }是来防止SQL注入,使用${ }是用来动态拼接参数。

    2023-02-12
    136

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注