首页 > 数据库 >Redis之持久化存储

Redis之持久化存储

时间:2022-10-06 15:23:28浏览次数:54  
标签:AOF 存储 持久 Redis RDB save 数据

Redis持久化解决方案

RDB

  RDB存储的重点在于数据本身,将数据持久化存入后缀为.rdb的文件中,即快照,每隔一段时间记录新的数据,像快速拍照一样,每次拍完放在一边,用的时候快速恢复。所以叫快照

AOF

  AOF在于记录操作过程,将指令以日志的形式保存存储操作过程,存储格式复杂

----------------------------------------------------------------------------------------------------------------------------------------

Redis持久化之RDB

RDB的启动方式——save指令 手动执行保存

保存后持久化的文件 .rdb

工作原理

Redis是单线程,所有命令都会在类似队列中排好队,不建议使用save指令,因为save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成位置,有可能会造成长时间阻塞,线上环境不建议使用

  • RBD单线程问题解方案

后台执行 -----命令bgsave 作用:手动启动后台保存操作,但不是立即执行

开启后自动保存

注:

   1.bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用,注意bgsave持久化的时候是持久化bgsave命令之前的数据

  2.save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的

  3.save配置中对second与changes设置通常具有互补对应关系,尽量不要设置成包含性关系

  4.save配置启动后执行的是bgsave操作,每个小时 数据的增删改的操作 增加 删除 修改

RDB优缺点

  • 优点

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

2.RDB内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份全量复制等场景

3.RDB恢复数据的速度要比AOF快很多

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

  • 缺点

1.RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具体较大的可能性丢失数据

2.bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能

3.Redis的众多版本中未进行RDB文件格式的版本统一,有可能出现个版本服务之间数据格式无法兼容现象(比如3.x和4.x的版本)

4.也有可能在在开启子就进行持久化,然后设置了新数据,设置完了之后服务器宕机了

-----------------------------------------------------------------------------------------------------------------

Redis持久化之AOF

AOF

AOF持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。与RDB相比可以简单描述为改为记录数据产生的过程

AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式

AOF写数据的三种策略

  • 1.always

与rdb的手动save操作相同,每次写入操作均同步到AOF文件中,数据零误差,性能较低

  • 2.everysec

每秒将缓冲区中的指令同步到AOF文件中,数据准确性高,性能较高,再系统突然宕机的情况下最多丢失1秒内的数据

  • 3.no(系统控制)

由操作系统每次同步到AOF文件的周期,整体过程不可控

开启功能

1.配置

appendonly yes|no

作用:是否开启APF持久化功能,默认为不开启

2.配置

appendfsync always|everysec|no

作用:AOF持久化指令的方式

always每次在写的时候都会记录一下,但get操作不会记录

AOF持久化数据的缺点

在进行数据的添加时,同时对一个key进行多次添加,但只有最后一次操作的数据是有效的,重复的指令被同步到了aof文件中,造成了冗余

  • 解决方案:重写AOF

将同样一个数据的若干个命令执行结果转换为最终结果数据对应的指令进行记录

AOF重写作用:

降低磁盘占用量,提高磁盘利用率

提高持久化效率,降低持久化写时间,提高IO性能

降低数据恢复时间,提高数据恢复效率

AOF重写规则:

1.超时的数据不再写入文件

  1. 忽略无效指令,重写时使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令 如del key1,hdel key2,srem key3,set key 222等

  2. 对统一数据的多条命令合并为一条命令 如 lpush list1 a ,lpush list1 b,lpush list1 c可以转化为lpush list1 a b c

  3. 为防止数据量过大造成客户端缓冲区溢出,对list,set,hash,set等类型,每条指令最多写入64个元素

AOF重写方式:

手动重写:Bgrewriteaof (类似rdb执行一条指令就重写)

自动重写:auto-aof-rewrite-min-size size auto-aof-rewrite-percentage percentage

==========================================

RDB-AOF混合持久化

4.0开始允许使用RDB-AOF混合持久化的方式

持久化开关开启后,AOF文件的前半段为RDB文件,后半段为AOF,且文件开头带有REDIS

标签:AOF,存储,持久,Redis,RDB,save,数据
From: https://www.cnblogs.com/Joshua-BlueSky/p/16757681.html

相关文章

  • Redis的五种基本结构
    Stirng类型操作成功返回大于0的数或Integer1操作失败Integer0nil为空基本指令1.添加一组键值对setnameJoshua2.根据key获取value>getname"Joshua"3.key删......
  • P3834 【模板】可持久化线段树 2
    P3834主席树模板,求区间第k小。1#include<bits/stdc++.h>2usingnamespacestd;3#definelctr[i].ch[0]4#definerctr[i].ch[1]5#defineLctr[j].ch[0......
  • 004-Redis 的 Generic 命令组
    1.Generic1.1copy1.1.1基本信息COPYsourcedestination[DBdestination-db][REPLACE]summary:Copyakeysince:6.2.0Thiscommandcopiesthevaluestored......
  • 005-Redis的 Hash 命令组
    1.Hash1.1hdel1.1.1基本信息HDELkeyfield[field...]summary:Deleteoneormorehashfieldssince:2.0.0Removesthespecifiedfieldsfromthehashstor......
  • db2 多温度存储器
    一、概述DB2V10中新增加的特性将访问频率不同的数据放置在不同的存储空间中引入了存储组(storagegroup)的概念方便DBA对不同热度的数据进行管理二、存储器组存储数据的存储......
  • 3.6 Cache存储器
    Cache引入原因:(1)CPU和主存速度存在差异(2)CPU和I/O争抢访存一旦主存与I/O交换信息,主存可以将CPU需要的信息提前送至缓存,CPU可直接从缓存中读取所需信息,不必空等影响效率......
  • 3.5 并行存储器
    由于CPU和主存储器之间在速度上是不匹配的,这种情况便成为限制高速计算机设计的主要问题。为了提高CPU和主存之间的数据传输率,除了主存采用更高速的技术来缩短读出时间外,......
  • redis.conf 文件参数说明
    #不区分大小写#unitsarecaseinsensitiveso1GB1Gb1gBareallthesame.#include组合多个配置问题#include/path/to/local.conf#include/path/to/other......
  • NoSQL之Redis配置与优化
    NoSQL之Redis配置与优化一、关系数据库和非关系数据库1.关系型数据库●关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。●主要......
  • Redis常用数据类型以及操作
    Redis常用数据类型以及操作一、String数据类型String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对......