首页 > 数据库 >Redis系列之——持久化

Redis系列之——持久化

时间:2024-04-22 20:11:13浏览次数:21  
标签:aof 持久 AOF Redis rdb 系列 yes save 重写

一 持久化的作用

1.1 什么是持久化

redis的所有数据保存在内存中,对数据的更新将异步的保存到硬盘上

1.2 持久化的实现方式

快照:某时某刻数据的一个完成备份,
	-mysql的Dump
    -redis的RDB
写日志:任何操作记录日志,要恢复数据,只要把日志重新走一遍即可
	-mysql的 Binlog
    -Hhase的 HLog
    -Redis的 AOF

二 RDB

2.1 什么是RDB

img

2.2 触发机制-主要三种方式


'''
save(同步)
1 客户端执行save命令----》redis服务端----》同步创建RDB二进制文件
2 会造成redis的阻塞(数据量非常大的时候)
3 文件策略:如果老的RDB存在,会替换老的
4 复杂度 o(n)
'''

'''
bgsave(异步,Backgroud saving started)

1 客户端执行save命令----》redis服务端----》异步创建RDB二进制文件(fork函数生成一个子进程(fork会阻塞reids),执行createRDB,执行成功,返回给reids消息)
2 此时访问redis,会正常响应客户端
3 文件策略:跟save相同,如果老的RDB存在,会替换老的
4 复杂度 o(n)
'''

'''
自动(通过配置)
配置   seconds   changes
save   900        1
save   300        10
save   60         10000
如果60s中改变了1w条数据,自动生成rdb
如果300s中改变了10条数据,自动生成rdb
如果900s中改变了1条数据,自动生成rdb

以上三条符合任意一条,就自动生成rdb,内部使用bgsave
'''

#配置:
save 900 1 #配置一条
save 300 10 #配置一条
save 60 10000 #配置一条
dbfilename dump.rdb  #rdb文件的名字,默认为dump.rdb
dir ./ #rdb文件存在当前目录

stop-writes-on-bgsave-error yes #如果bgsave出现错误,是否停止写入,默认为yes
rdbcompression yes #采用压缩格式
rdbchecksum yes #是否对rdb文件进行校验和检验

#最佳配置
save 900 1 
save 300 10 
save 60 10000 
dbfilename dump-${port}.rdb  #以端口号作为文件名,可能一台机器上很多reids,不会乱
dir /bigdiskpath #保存路径放到一个大硬盘位置目录
stop-writes-on-bgsave-error yes #出现错误停止
rdbcompression yes #压缩
rdbchecksum yes #校验

2.3 触发机制-不容忽略的方式

1 全量复制 #没有执行save和bgsave没有添加rdb策略,还会生成rdb文件,如果开启主从复制,主会自动生成rdb
2 debug reload #debug级别的重启,不会将内存中的数据清空
3 shutdown save#关闭会出发rdb的生成

2.4 试验



三 AOF

3.1 RDB问题

耗时,耗性能:
不可控,可能会丢失数据

3.2 AOF介绍

客户端每写入一条命令,都记录一条日志,放到日志文件中,如果出现宕机,可以将数据完全恢复

3.3 AOF的三种策略

日志不是直接写到硬盘上,而是先放在缓冲区,缓冲区根据一些策略,写到硬盘上
always:redis–》写命令刷新的缓冲区—》每条命令fsync到硬盘—》AOF文件
everysec(默认值):redis——》写命令刷新的缓冲区—》每秒把缓冲区fsync到硬盘–》AOF文件
no:redis——》写命令刷新的缓冲区—》操作系统决定,缓冲区fsync到硬盘–》AOF文件

命令
always
everysec
no

优点
不丢失数据
每秒一次fsync,丢失1秒数据
不用管

缺点
IO开销大,一般的sata盘只有几百TPS
丢1秒数据
不可控

3.4 AOF 重写

随着命令的逐步写入,并发量的变大, AOF文件会越来越大,通过AOF重写来解决该问题

原生AOF
AOF重写

set hello worldset hello javaset hello heheincr counterincr counterrpush mylist arpush mylist brpush mylist c过期数据
set hello heheset counter 2rpush mylist a b c

本质就是把过期的,无用的,重复的,可以优化的命令,来优化
这样可以减少磁盘占用量,加速恢复速度

实现方式

bgrewriteaof:
客户端向服务端发送bgrewriteaof命令,服务端会起一个fork进程,完成AOF重写

AOF重写配置:

配置名
含义

auto-aof-rewrite-min-size
AOF文件重写需要尺寸

auto-aof-rewrite-percentage
AOF文件增长率

统计名
含义

aof_current_size
AOF当前尺寸(单位:字节)

aof_base_size
AOF上次启动和重写的尺寸(单位:字节)

自动触发时机(两个条件同时满足):
aof_current_size>auto-aof-rewrite-min-size:当前尺寸大于重写需要尺寸
(aof_current_size-aof_base_size)/aof_base_size>auto-aof-rewrite-percentage:(增长率)当前尺寸减去上次重写的尺寸,除以上次重写的尺寸如果大于配置中的增长率

重写流程

img

配置

appendonly yes #将该选项设置为yes,打开
appendfilename "appendonly-${port}.aof" #文件保存的名字
appendfsync everysec #采用第二种策略
dir /bigdiskpath #存放的路径
no-appendfsync-on-rewrite yes #在aof重写的时候,是否要做aof的append操作,因为aof重写消耗性能,磁盘消耗,正常aof写磁盘有一定的冲突,这段期间的数据,允许丢失

3.5 AOF 重写演示



四 RDB和AOF的选择

4.1 rdb和aof的比较

命令
rdb
aof

启动优先级

高(挂掉重启,会加载aof的数据)

体积

恢复速度

数据安全性
丢数据
根据策略决定

轻重

4.2 rdb最佳策略

rdb关掉,主从操作时
集中管理:按天,按小时备份数据
主从配置,从节点打开

4.3 aof最佳策略

开:缓存和存储,大部分情况都打开,
aof重写集中管理
everysec:通过每秒刷新的策略

4.4 最佳策略

小分片:每个redis的最大内存为4g
缓存或存储:根据特性,使用不通策略
时时监控硬盘,内存,负载网络等
有足够内存

标签:aof,持久,AOF,Redis,rdb,系列,yes,save,重写
From: https://www.cnblogs.com/zdwzdwzdw/p/17487959.html

相关文章

  • docker安装redis
    下载最新的官方镜像dockerpullredis:latest在/app/redis下新建redis.conf:#开启密码验证(可选)requirepass123#允许redis外地连接,需要注释掉绑定的IP#bind127.0.0.1#关闭保护模式(可选)protected-modeno#注释掉daemonizeyes,或者配置成daemonizeno。因为该配......
  • “AI 程序员入职系列”第二弹:如何利用通义灵码光速改写项目编程语言?
    通义灵码入职阿里云云原生团队后,已经展示过Ta 生成单元测试和自动生成代码的强大实力。今天,阿里云后端工程师云徊将从项目开发的实际需求出发,演示通义灵码在开发工作中可提供的帮助。通义灵码在Git开发项目中起到了哪些作用?云徊所在的团队日常会参与Git的开发工作,Git本身......
  • “AI 程序员入职系列”第二弹:如何利用通义灵码光速改写项目编程语言?
    通义灵码入职阿里云云原生团队后,已经展示过Ta 生成单元测试和自动生成代码的强大实力。今天,阿里云后端工程师云徊将从项目开发的实际需求出发,演示通义灵码在开发工作中可提供的帮助。通义灵码在Git开发项目中起到了哪些作用?云徊所在的团队日常会参与Git的开发工作,Git本身......
  • redis自学(40)什么是多级缓存
    传统缓存的问题传统的缓存策略一般是请求到达Tomcat后,先查询redis,如果未命中则查询数据库,存在下面的问题:l 请求要经过tomcat处理,tomcat的性能成为整个系统的瓶颈l Redis缓存失效时,会对数据库产生冲击  多级缓存方案多级缓存就是充分利用请求处理的每个环节,分别添加缓......
  • redis 安装使用
    下载地址https://download.redis.io/releases/解压tarzxvfredis-7.0.15.tar.gz-C/usr/local/编译redis:cd/usr/local/redis-7.0.15/make编译完成后会在目录下生成生成一个src的目录安装redis:cdsrc/makeinstallPREFIX=/usr/local/redis安装完成。移动配......
  • 【Docker系列】Section 1: Docker and Container Fundamentals①
    本篇是根据《KubernetesandDocker–AnEnterpriseGuide》整理出来的,原著作者:ScottSurovich|MarcBoorshtein,大家可以关注一下。Whothisbookisfor❓我们创建这本书是为了帮助DevOps人员团队扩展他们的技能,超越Kubernetes的基础知识。它是根据我们在多个企业环境......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-38-如何截图-下篇
    1.简介这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法。答案当然是:肯定有的。宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享。那么在这个契机下就把它插队分享和讲解一下。Playwright提供了一个截屏的API:page.......
  • Java集成系列:高效构建自定义插件
    前言随着软件开发的快速发展和需求的不断增长,开发人员面临着更多的压力和挑战。传统的开发方法需要花费大量的时间和精力,而低代码开发平台的出现为开发人员提供了一种更加高效、快速的开发方式。今天小编就以构建命令插件为例,展示如何使用Java语言高效构建自定义插件。环境准备......
  • C#基础:《C# 7.0核心技术指南(原书第7版)》读书笔记系列
    C#基础:《C#7.0核心技术指南(原书第7版)》读书笔记系列一、书本简介本书前三章将集中介绍C#语言。首先介绍最基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。其余各章则涵盖了.NETFramework的核心功能,包括LINQ、XML、集合、并发、I/O和网络、内......
  • redis list数据结构操作学习
    转自:https://zhuanlan.zhihu.com/p/765785471.插入元素>rpushmylistA#从右侧插入(integer)1>rpushmylistB(integer)2>lpushmylistfirst(integer)3>lrangemylist0-1//这里使用0-1表示显示所有元素,注意是:0空格-1,0代表第一个元素,-1代表最后......