Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案

在这里插入图片描述

Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。

RDB持久化(默认支持,无需配置)

该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。

AOF持久化

该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

无持久化

我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的Memcached(一个自由开源的,高性能,分布式内存对象缓存系统)了。

1、RDB持久化

在这里插入图片描述

1.1、RDB持久化机制优点

一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,让redis的数据存取速度变快,这对于文件备份而言是非常完美的。

1.2、RDB持久化机制缺点

1.如果想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失,服务器断电时会丢失部分数据(数据的完整性得不到保证)。
2.由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

1.3、快照与备份

快照是数据存储的某一时刻的状态记录。

备份则是数据存储的某一个时刻的副本。

1.4、快照触发条件

1.客户端执行命令save和bgsave会生成快照;
2.根据配置文件save m n规则进行自动快照;
3.主从复制时,从库全量复制同步主库数据,此时主库会执行bgsave命令进行快照;
4.客户端执行数据库清空命令FLUSHALL时候,触发快照;
5.客户端执行shutdown关闭redis时,触发快照;

1.5、RDB持久化机制的配置

# 如果900s内,如果至少有一个1个key进行了修改,就进行持久化操作 
save 900 1 
# 如果300s内,如果至少10个key进行了修改,就进行持久化操作 
save 300 10 
# 如果60s内,如果至少10000个key进行了修改,就进行持久化操作 
save 60 10000 
# 关闭该规则使用save “ ” 
 
# yes代表当使用bgsave命令持久化出错时候停止写RDB快照文件,no表明忽略错误继续写文件。
stop-writes-on-bgsave-error yes   
# # 是否压缩 rdb 文件,需要消耗一些cpu资源,该功能可以节约磁盘空间。
rdbcompression yes                
# 在写入文件和读取文件时是否开启rdb文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动
rdbchecksum yes
# 持久化文件名
dbfilename dump.rdb       
# 数据文件存放目录,rdb快照文件和aof文件都会存放至该目录,请确保有写权限        
dir ./      

1.6、测试

1、删除redis安装目录下的dump.rdb文件
2、对redis进行操作,比如set test abc
3、关闭服务端并观察bin目录的变化(会发现重新出现dump.rdb文件)

2、AOF持久化

在这里插入图片描述
当redis存储非临时数据时,为了降低redis故障而引起的数据丢失,redis提供了AOF(Append Only File)持久化,从单词意思讲, 将命令追加到文件。AOF可以将Redis执行的每一条写命令追加到磁盘文件(appendonly.aof)中
在redis启动时候优先选择从AOF文件恢复数据。由于每一次的写操作,redis都会记录到文件中,所以开启AOF持久化会对性能有一定的影响

以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件 但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件 的内容将写指令从前到后执行一次以完成数据的恢复工作

AOF持久化数据丢失更少,其消耗内存更少(RDB方式执行bgsave会有内存拷贝)

2.1、开启AOF持久化

默认情况下,redis是关闭了AOF持久化,开启AOF通过将redis.windows.conf配置文件中的appendonly改为yes开启。将appendonly修改为yes,开启aof持久化机制,默认会在目录下产生一个appendonly.aof文件。修改redis.windows.conf配置文件或者在命令行直接使用config set修改,再用config rewrite同步到配置文件。通过客户端修改好处是不用重启redis,AOF持久化直接生效。
config get appendonly 查询配置状态
config set appendonly yes 修改配置,命令生效了,但配置文件里没有生效
在这里插入图片描述
config rewrite 写入到redis.conf中,配置文件生效(如果先将该配置文件中改为了yes则只需要通过config set appendonly yes 命令改为yes即可,平常不想用即改为no即可)
在这里插入图片描述

2.2、AOF配置

appendonly no   # 默认是不开启aof模式的,默认使用rdb方式进行持久化,大部分情况rdb够用
appendfsync always       # 每执行一次更新命令,持久化一次
appendfsync everysec     # 每秒钟持久化一次
appendfsync no           # 不持久化

2.3、AOF文件错误

如果这个 aof 文件有错误,这时候 redis 是启动不起来的,我们需要修复这个aof文件 redis 给我们提供了一个工具 redis-check-aof --fix 。

redis-check-aof --fix appendonly.aof

这个工具可以修复错误,但是可能会造成一部分数据丢失(出现错误的那部分数据)。

2.4、AOF重写规则

aof 默认就是文件的无限追加,文件会越来越大。
在这里插入图片描述
如果 aof 文件大于 64m,太大了。 fork一个新的进程来将我们的文件进行重写。

2.5、优点

每一次修改都同步,文件的完整会更加好,持久化良好,能包证数据的完整性

2.6、缺点

1、相对于数据文件来说,aof远远大于 rdb,修复的速度也比 rdb慢。

2、Aof 运行效率也要比 rdb 慢,所以我们redis默认的配置就是rdb持久化。

2.7、测试

1、删除appendonly.aof
2、设置appendonly为yes
2、对redis进行操作,比如向redis中存入一个key
3、观察bin目录的变化(appendonly.aof文件会重新出现,打开后里面内容是刚才对redis操作的语句)

3、RDB-AOF混合持久化

通过aof-use-rdb-preamble配置参数控制,yes则表示开启,no表示禁用,默认是禁用的,可通过config set修改。

4、持久化扩展

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

2、AOF 持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始 的数据,AOF命令以Redis 协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重 写,使得AOF文件的体积不至于过大。

3、只做缓存,如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化。

4、同时开启两种持久化方式

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

RDB 的数据不实时,同时使用两者时服务器重启也只会找AOF文件,那要不要只使用AOF呢?建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有 AOF可能潜在的Bug,留着作为一个万一的手段。

5、性能建议

因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够 了,只保留 save 900 1 这条规则。

如果Enable AOF ,好处是在恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自 己的AOF文件就可以了,代价一是带来了持续的IO,二是AOF rewrite 的后将 rewrite 过程中产 生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite 的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上,默认超过原大小100%大小重 写可以改到适当的数值。

如果不Enable AOF ,仅靠 Master-Slave Repllcation 实现高可用性也可以,能省掉一大笔IO,也 减少了rewrite时带来的系统波动。代价是如果Master/Slave 同时倒掉,会丢失十几分钟的数据, 启动脚本也要比较两个 Master/Slave 中的 RDB文件,载入较新的那个,微博就是这种架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/345610.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue 的 事件修饰符and按键修饰符

1、事件修饰符概览 修饰符说明 .prevent阻止默认事件 .stop阻止冒泡.once事件只触发一次 .capture 添加事件侦听器时使用事件捕获模式.self只有点击当前元素本身时才会触发回调.passive事件的默认行为立即执行,无需等待事件回调执行完毕(不常用).native 将vue组件…

【单例模式】保证线程安全实现单例模式

📄前言:本文是对经典设计模式之一——单例模式的介绍并讨论单例模式的具体实现方法。 文章目录 一. 什么是单例模式二. 实现单例模式1. 饿汉式2. 懒汉式2.1 懒汉式实现单例模式的优化(一)2.2 懒汉式实现单例模式的优化&#xff08…

蓝桥杯官网填空题(01串的熵)

问题描述 答案提交 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。 import java.util.*;public class Main {public static void main(String[] args) {for(double zero1;zero<2333…

开始学习vue2(Vue方法)

一、过滤器 过滤器&#xff08;Filters&#xff09;是 vue 为开发者提供的功能&#xff0c;常用于文本的格式 化。过滤器可以用在两个地方&#xff1a;插值表达式 和 v-bind 属性绑定。 过滤器应该被添加在 JavaScript 表达式的尾部&#xff0c;由“管道符 ”进行 调用&#…

【Linux】常见指令(二)

前言 常见指令第二部分。 文章目录 一、指令&#xff08;下&#xff09;重定向>&#xff1a;输出重定向>>&#xff1a;追加输出<&#xff1a;输入重定向 10. more—显示文本文件内容11.less—逐屏浏览文本文件内容12. head13. tail管道 |14. date—时间指令在这里插…

5个程序员可以接私活的平台和一些建议

22年之前我从没有接触过程序员外包接单&#xff0c;也没有任何的私活接单经验&#xff0c;就纯纯看自己瞎摸索&#xff0c;通过Google搜索&#xff0c;在各类程序员私活接单平台上摸爬滚打&#xff0c;硬是杀出一条血路&#xff0c;从一开始的年入3k到现在每月稳定收入1w&#…

STL第四讲

第四讲 万用Hash Function 左侧的是设计为类并重载调用运算符&#xff0c;右侧是一般函数的形势&#xff1b; 但是右侧形势在创建容器时更麻烦&#xff1b; 具体例子&#xff1a; 第三种形势&#xff1a;struct hash 偏特化形式 tuple 自C03引入&#xff1b; 关于源码解读的…

Xcode 15 libarclite 缺失问题

升级到Xcode 15运行项目报错&#xff0c;报错信息如下&#xff1a; SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum d…

2024年学鸿蒙开发有前途吗?

随着科技的不断发展和智能设备的普及&#xff0c;鸿蒙系统作为华为自主研发的操作系统&#xff0c;正逐渐受到市场的关注。2024年&#xff0c;学鸿蒙开发是否有前途&#xff0c;成为了很多开发者和学生关心的问题。本文将从多个角度分析鸿蒙系统的发展前景&#xff0c;以及学习…

elment-plus如何引入scss文件实现自定义主题色

elment-plus如何引入scss文件实现自定义主题色&#xff01;如果您想修改elementPlus的默认主题色调&#xff0c;使用自定义的色调&#xff0c;可以考虑使用官方提供的解决办法。 第一步你需要在项目内安装sass插件包。 npm i sass -D 如图&#xff0c;安装完成后&#xff0c;你…

Redisson 分布式锁解决主从一致性问题的原理

目录 一、主从不一致产生原因 二、Redisson 解决主从一致性的原理 一、主从不一致产生原因 1. Redis 主从集群&#xff1a;主从读写分离&#xff0c;主节点将数据同步给从节点 主节点&#xff1a;增删改从节点&#xff1a;读 2. 主从同步存在延迟&#xff0c;若主节点宕机…

Borze(与连续元素有关的题目)

总结&#xff1a;碰到与连续元素有关的题目&#xff0c;可以考虑在某种条件下加i&#xff1b;之类的。

valgrind使用

文章目录 简介安装如何使用valgrind来检测内存错误&#xff1f;如何使用其它的工具&#xff1f;总结 简介 Valgrind是一个工具集&#xff0c;包含了许多调试与性能分析的工具。其中使用最多的是Memcheck&#xff0c;它能帮你检测C/C中的内存问题&#xff0c;避免程序崩溃或不可…

JS之打地鼠案例

需要素材的同学可以私信我 效果图&#xff1a; 上代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box {position: relative;width: 320px;heigh…

【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(三):性能优化策略

关于MySQL部分的核心知识进行一网打尽,包括三部分:基础知识考察、核心机制策略、性能优化策略,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:性能优化策略,子节点表示追问或同级提问 读写分离 分布式数据库的…

【学网攻】 第(4)节 -- 交换机划分Vlan

文章目录 【学网攻】 第(1)节 -- 认识网络 【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口 前言 网络已经成为了我们生活中不可或缺的一部分&#xff0c;它连接了世界各地的人们&#xff0c;让信息和资源得以自由流动。随着互联网的发展&am…

大模型微调实战笔记

大模型三要素 1.算法&#xff1a;模型结构&#xff0c;训练方法 2.数据&#xff1a;数据和模型效果之间的关系&#xff0c;token分词方法 3.算力&#xff1a;英伟达GPU&#xff0c;模型量化 基于大模型对话的系统架构 基于Lora的模型训练最好用&#xff0c;成本低好上手 提…

vue3和vite项目在scss中因为本地图片,不用加~

看了很多文章说要加~&#xff0c;真的好坑哦&#xff0c;我的加了~反而出不来了&#xff1a; 304 Not Modified 所以需要去掉~&#xff1a; /* 默认dark主题 */ :root[themered] {--bg-color: #0d1117;--text-color: #f0f6fc;--backImg: url(/assets/images/redBg.png); }/* …

代码随想录算法训练营第四十二天|01背包问题、01背包问题(滚动数组)、416. 分割等和子集

题目&#xff1a;01背包问题 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:背包问题 题目链接&#xff1a;卡码题目链接 图释&#xff1a; //二维dp数组实现 #include <bits/stdc.h> using namespace std;int n, bagweight;// bagweight代表行李箱空…