当前位置: 首页 > news >正文

Redis_AOF持久化

AOF持久化

在AOF持久化的过程中,会以日志的方式记录每个redis“写”命令,并且redis服务器重启时重新执行AOF日志文件中的命令,从而达到“恢复数据”的效果

在这里插入图片描述

AOF故障恢复

当redis因发生故障而重启时,redis服务器会按照如下步骤根据AOF日志文件恢复数据

  • 创建一个伪客户端(fake client)。之所以叫伪客户端,是因为该客户端在本地,不带任何网络连接,但该伪客户端执行命令的效果,和真实的带网络的客户端没有任何差别
  • 该伪客户端从AOF日志文件里依次读取一条写命令并执行,直到完成所有写命令

执行完上述步骤后,其实就达到了“根据AOF日志文件恢复redis现场”的持久化效果

AOF相关参数

  • 可以通过设置配置文件里的参数来启动或停止AOF持久化机制

  • 基于AOF的持久化方式具有实时存储的特性,因此可以在读写关键数据时开启以防因Redis重启或故障而导致的风险。

  • 在默认情况下,Redis服务器未开启AOF持久化机制,通过修改redis.conf中的appendonly参数来开启

    appendonly yes
    
  • appendonly参数开启AOF持久化以后,通过appendfsync参数可以设置持久化的策略,该参数有三种取值:always、everysec和no。

always

appendonly参数取值为always时,每次发生Redis的写命令时都会触发持久化动作,可能会影响到Redis乃至Redis所在服务器的性能。

everysec

appendonly参数取值为everysec时,会以一秒的频率触发持久化动作,在这种方式下能很好地平衡持久化需求和性能间的关系,一般情况下取这个值。

no

appendonly参数取值为no时,会由操作系统来决定持久化的频率,这种方式对其他另外两种而言性能最好,但可能每次持久化操作间的间隔有些长,这样当故障发生时可能会丢失较多的数据。

通过dir和appendfilename这两个参数能设置持久化文件所在的路径和文件名而持久化文件的默认文件名是appendonly.aof

AOF文件重写

  • 随着持久化数据的增多,对应的AOF文件会越来越大,这可能会影响到性能对此,Redis提供了AOF文件重写功能。

  • Redis能创建新的AOF文件来替代现有的,在数据恢复时,这两个文件的效果是相同的,但新文件不会包含冗余命令,所以文件大小会比原来的小,可以通过如下三个参数来定义重写时的策略。

  • 通过no-appendfsync-on-rewrite参数来平衡性能和安全性:如果该参数取值为yes,那么在重写AOF文件时能提升性能,但可能在重写AOF文件时丢失数据如果取值为no,则不会丢失数据,但较取值为yes的性能可能会降低。默认取值是no。

  • 通过auto-aof-rewrite-percentage参数能指定重写的条件,默认是100,即果当前的AOF文件比上次执行重写时的文件大100%时会再次触发重写操作。果该参数取值为0,则不会触发重写操作。

  • 通过auto-aof-rewrite-min-size参数可以指定触发重写时AOF文件的大小,默认是64MB。

  • auto-aof-rewriterpercentage和auto-aof-rewrite-min-size两个参数指定的重写条件是“And”的关系,即只有当同时满足这两个条件时才会触发重写操作

  • 也可以通过bgrewriteaof命令来手动触发针对AOF持久化文件的重写操作。

AOF持久化实践

1.修改配置文件

修改redis.conf文件,在其中编写如下配置信息

appendonly yes  #启动AOF持久化机制
appendfsync everysec  #设置持久化的策略,持久化频率为1秒
dir ./  #设置持久化文件保存地址

apendfilename默认是appendonly.aof文件名

2.重新启动redis
redis-cli -a 123456 shutdownredis-server redis.conf
3.操作redis
redis_test:0>set name yohoo
"OK"
redis_test:0>set age 25
"OK"

查看服务器上appendonly.aof文件

[root@192 redis-6.2.7]# cat appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
set
$4
name
$5
yohoo
*3
$3
set
$3
age
$2
25
4.重启redis验证数据是否能恢复
[root@192 redis-6.2.7]# redis-cli -a 123456 shutdown
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
[root@192 redis-6.2.7]# redis-server redis.conf
[root@192 redis-6.2.7]# 

数据恢复

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分支结构的本质
  • Leetcode11. 盛最多水的容器
  • 约 数之和
  • 大白话【5】redhat 9 用户,用户组管理
  • 高端控制台定制需要提前了解哪些知识点
  • 11 索引
  • (十七)Flink 容错机制
  • 富格林:正规方式顺利盈利出金
  • windows上传文件精准包含技巧
  • Python算法L2:排序算法(详细版)
  • 从零到精通,一步步教你玩转在线思维导图,提升思维力
  • 秋招转型上岸大模型算法岗,咋做到的?
  • 使用[KafkaStreams流计算框架实时计算产生报警(升级报警)
  • AI基础 -- 练手之预测耗时方案
  • vllm 推理qwen gguf模型使用案例;openai接口调用、requests调用
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【Leetcode】104. 二叉树的最大深度
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 03Go 类型总结
  • es6要点
  • exif信息对照
  • express + mock 让前后台并行开发
  • IOS评论框不贴底(ios12新bug)
  • JAVA并发编程--1.基础概念
  • Java读取Properties文件的六种方法
  • Java多态
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Python 基础起步 (十) 什么叫函数?
  • React 快速上手 - 07 前端路由 react-router
  • React系列之 Redux 架构模式
  • 闭包--闭包作用之保存(一)
  • 创建一种深思熟虑的文化
  • 关于 Cirru Editor 存储格式
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 欢迎参加第二届中国游戏开发者大会
  • 聊聊flink的BlobWriter
  • 入口文件开始,分析Vue源码实现
  • 深度学习在携程攻略社区的应用
  • 深度学习中的信息论知识详解
  • 1.Ext JS 建立web开发工程
  • 湖北分布式智能数据采集方法有哪些?
  • ​决定德拉瓦州地区版图的关键历史事件
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (ZT)出版业改革:该死的死,该生的生
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (蓝桥杯每日一题)love
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (图)IntelliTrace Tools 跟踪云端程序
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Sublime Text3配置Lua运行环境
  • ******之网络***——物理***
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现