redis高可用---持久化

redis高可用

在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天) 99.9%,redis高可用含义更广泛,支持服务是指标之一,数据容量扩展,数局的安全性。(容量、安全性)


redis中实现高可用的技术:

1、持久化-----就简单的高可用方法,主要作用是数据备份,也就是把redis缓存在内存中的数据保存在本地硬盘中。(冷备份)
2、主从复制
3、哨兵模式
4、cluster集群


持久化

主要作用是数据备份,最简单的高可用方法,也就是把redis缓存在内存中的数据保存在本地硬盘中。(冷备份)

持久化的两种方式:

1、RDB持久化:redis在内存中的数据定时保存到磁盘。(自动执行、手动执行)
2、AOF持久化:redis的操作日志,以追加的方式写入一个AOF的文件,类似于mysql的binlog
优先级 RDB的.rdb文件(默认)< AOF的.aof文件

RDB持久化

RDB持久化:指在指定时间间隔内,将内存中当前进程中的数据生产快照保存到硬盘(快照持久化),用二进制压缩存储。保存的文件名后缀.rdb。redis启动时,可以直接读取快照文件,实现数据恢复。

RDB的触发机制
手动机制:save bgsave都可以生成RDB文件。

手动机制

save工作流程:创建rdb文件时,整个redis进程会被阻塞模式,期间redis将无法进行读写操作,直到rdb文件创建完成为止。生产中不能用save。

bgsave:是主从复制的机制

bgsave工作流程主进程会通过fork机制创建一个子进程,子进程重建过程中,主进程会阻塞,子进程创建完毕,主进程解除阻塞。子进程来创建RDB文件。创建完成之后,通知主进程更新通知信息。

vim /etc/redis/6379.conf

--219行--以下三个save条件满足任意一个时,都会引起bgsave的调用
save 900 1 :当时间到900秒时,如果redis数据发生了至少1次变化,则执行bgsave
save 300 10 :当时间到300秒时,如果redis数据发生了至少10次变化,则执行bgsave
save 60 10000 :当时间到60秒时,如果redis数据发生了至少10000次变化,则执行bgsave--254行--指定RDB文件名
dbfilename dump.rdb--264行--指定RDB文件和AOF文件所在目录
dir /var/lib/redis/6379--242行--是否开启RDB文件压缩
rdbcompression yes
自动机制

除了save m n 以外,还有一些其他情况会触发bgsave:
● 在主从复制场景下,如果从节点执行全量复制操作,则主节点会执行bgsave命令,并将rdb文件发送给从节点。
● 执行shutdown命令时,自动执行rdb持久化。

AOF的重写功能

1、 随着时间增长AOF文件中的数据也会不断怎加。AOF的文件也会越来越大,过大的AOF文件不仅仅会影响服务器的正常运行,也会导致数据恢复的时间过长。

文件重写是指定期的重写AOF文件,减小AOF文件的体积。AOF重写是把redis进程内的数据,转化为写的命令,同步到新的AOF文件中(不会额外生成一个新的文件,只是在原有内容中进行压缩),不会对原有的文件进行任何读、写的操作。

文件重写虽然是AOF持久化强烈推荐的,但不是必须的。没有重写,并不影响redis启动时读取数据。在实际中,会关闭自动的文件重写。通过定时任务来完成。

AOF持久化:

·AOF持久化是将redis的每一次读写删除命令记录到一个单独的文件。保存的文件名后缀.aof。查主询操作由进程记录。当redis重启时,,再次执行AQF文件中的命令来恢复数据。
·AOF的实时性更好,也是主流的持久化方案

vim /etc/redis/6379.conf

--700行--修改,开启AOF
appendonly yes--704行--指定AOF文件名称
appendfilename "appendonly.aof"--796行--是否忽略最后一条可能存在问题的指令
aof-load-truncated yes
#用于判断AOF文件,如果被截断时的行为
#截断:写入过程中出现异常,导致文件未能完全写入
#yes:发现被截断,redis会在启动时尽可能恢复文件中的数据。redis会继续运行
#no:发现AOF文件被截断,redis将拒绝启动如果对数据的完整性高,建议使用no
如果追求数据服务器的可用性,可以使用yes
可用性在并发场景上很重要,推荐使用yes

AOF如何实现备份恢复

vim /etc/redis/6379.conf
cd /var/lib/redis/6379
#检查文件是否生成实现数据恢复
进入redis
set test1 1
set test2 2
set test3 3
vim /var/lib/redis/6379/appendonly.aof
#配置文件会记录所有redis的操作
flushall
/etc/init.d/redis_6379 stop
#停止redis服务
vim /var/lib/redis/6379/appendonly.aof
#根据为位置点删除flushall这个操作
/etc/init.d/redis_6379 restart
#重启服务
进入redis查看文件恢复
实验已经完成!

AOF缓存区的同步文件策略存在三种同步方式,它们分别是:

vim /etc/redis/6379.conf
--729--
●appendfsync always: 命令写入aof_buf后立即调用系统fsync操作同步到AOF文件,fsync完成后线程返回。
这种情况下,每次有写命令都要同步到AOF文件,硬盘IO成为性能瓶颈,Redis只能支持大约几百TPS写入,
严重降低了Redis的性能;即便是使用固态硬盘(SSD),每秒大约也只能处理几万个命令,而且会大大降低SSD的寿命。●appendfsync no: 命令写入aof_buf后调用系统write操作,不对AOF文件做fsync同步;同步由操作系统负责,
通常同步周期为30秒。这种情况下,文件同步的时间不可控,且缓冲区中堆积的数据会很多,数据安全性无法保证。●appendfsync everysec: 命令写入aof_buf后调用系统write操作,write完成后线程返回;
fsync同步文件操作由专门的线程每秒调用一次。everysec是前述两种策略的折中,是性能和数据安全性的平衡,
因此是Redis的默认配置,也是我们推荐的配置。
重写的触发条件

1、手动触发
重写命令 redis-cli bgrewriteaof

2、自动触发
 

vim /etc/redis/6379.conf​
771行
auto-aof-rewrite-percentage 100
#文件的大小超过基准的百分比。默认值就是100。文件的大小超过2倍时,会执行bgrewriteaof。
如果设置为0就是禁用自动触发。auto-aof-rewrite-min-size 64mb
#文件大于基准值,才会进行重写。这个是AOF文件执行重写的最小值,避免开始启动redis后,文件太小,然后频繁的进行重写。​
必须要有auto-aof-rewrite-min-size 64mb。
否则会频繁重写。如果配置定时任务需要先注释掉auto-aof-rewrite-percentage 100否则会自动生效。

AOF重写为什么可以压缩文件?

1、 在重写的过程中,如果有过期的数据不会写入文件

2、 重写的过程中无效的命令不再写入文件,数据被重复设置,例如:set test=1 set test=2。删除的数据也不会写入,例如:set test 1 del test

3、 多条命令合并成一个。例如:sadd test1 v1 sadd test1 v2 sadd test1 v3 合并为 sadd test1 v1 v2 v3

重写之后,AOF的文件当中的命令减少了,空间也少了,恢复速度也怎加了。(重写不是必须的)
 

RDB和AOF的优缺点

RDB的优点:文件体积小,网络传输的速度很快,适合全量复制。恢复速度比AOF快。
RDB的缺点:做不到实时的持久化,数据如此重要,不能够容忍数据丢失。RDB需要满足特定的格式,兼容性很差。
老版本的RDB不支持新版本。redis版本要一致

AOF的优点:秒级持久化,兼容性好(文本格式保存命令通用)。
AOF的缺点:文件大,恢复速度慢。AOF持久化,需要频繁的向磁盘写入数据,磁盘的io压力大,对redis的主进程新能也有一定的影响

启动时加载发现rdb文件被损坏,日志中会打印错误,redis会拒绝启动。redis-check-rdb 修复RDB的持久化文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯软件赛 零基础备赛20周】第4周——简单模拟1

文章目录 什么是简单模拟简单模拟和编程能力刷题 什么是简单模拟 正在学编程语言&#xff08;C/C、Python、Java&#xff09;&#xff0c;或者刚学过语言&#xff0c;还没有开始学数据结构和算法的同学&#xff0c;有一些疑问&#xff1a;如何快速入门算法竞赛&#xff1f;如何…

数据仓库模式之详解 Inmon 和 Kimball

目录 一、前言 二、企业信息工厂&#xff08;Inmon&#xff09; 2.1 概念 2.2 主要组件 2.3 流程 三、多维数据仓库&#xff08;Kimball&#xff09; 3.1 概念 3.2 核心组件 3.3 流程 四、异同及用途对比 4.1 异同对比 4.2 特征比较 一、前言 大部分关于数据仓库构建…

小微初创企业,如何利用媒体宣传快速成长

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 对于小微初创企业来说&#xff0c;利用媒体宣传可以快速提升品牌知名度、扩大影响力&#xff0c;进而促进企业的成长。 1.确定宣传目标&#xff1a;是增加销售、提升品牌知名度、还是推…

JVM对象创建与内存分配

对象的创建 对象创建的主要流程&#xff1a; 类加载推荐博客&#xff1a;JVM类加载机制详解 类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析…

Failed to load resource: net::ERR_UPLOAD_FILE_CHANGED 谷歌浏览器就会有这个问题 其他的浏览器没有

Failed to load resource: net::ERR_UPLOAD_FILE_CHANGED 10 10: Difficulties in file uploading through all browsers and applications

whisper finetuning

Vaibhavs10/fast-whisper-finetuning (github.com)

mac添加Chrome插件的方法

如果是.crx的插件 更改后缀crx为zip 后续步骤同下文.zip文件 如果是.zip的插件 使用终端进行解压 注意不要用解压工具解压&#xff0c;一定要用终端&#xff0c;命令行解压 // 进入到“插件名.zip”文件的目录下&#xff0c;输入下面命令&#xff1a; unzip 插件名.zip -…

2.6文件服务器

2.6文件服务器 一、Ftp 介绍 文件传输协议&#xff08;File Transfer Protocol&#xff0c;FTP&#xff09;&#xff0c;基于该协议FTP客户端与服务端可以实现共享文 件、上传文件、下载文件。 FTP 基于TCP协议生成一个虚拟的连接&#xff0c;主要用于控制FTP连接信息&#x…

「ResNet-18」70 个犬种的图片分类

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

LeetCode【45】跳跃游戏2

题目&#xff1a; 思路&#xff1a; 注意和跳跃游戏【55】不同的是&#xff0c;题目保证可以跳到nums[n-1];那么每次跳到最大即可 代码&#xff1a; public class LeetCode45 {public static int jump(int[] nums) {int jumps 0;int currentEnd 0;int farthest 0;for(int…

20. Spring源码篇之@Lookup详解

简介 Lookup注解可能平时开发中大家接触的少&#xff0c;但是又确实挺有用的&#xff0c;比如我们一个单例Bean注入了一个原型Bean&#xff0c;原型Bean的效果其实是会失效的&#xff0c;因为单例Bean一开始就实例化好了&#xff0c;后面也不会再变化&#xff0c;但我们可能需…

类型体系与基本数据类型(题目)

目录 1. 本章讨论了标签的用法。在我们经常使用的标准模板库&#xff08;STL&#xff09;中也存在标签的概念。STL将迭代器进行了划分&#xff0c;为不同的迭代器赋予了不同的标签&#xff08;如双向迭代器、随机访问迭代器等&#xff09;。在网络上搜索一下相关的概念&#x…

Android Serializable / Parcelable

Serializable 序列化,将对象转为二进制序列 Parcelable 不是序列化,属于进程间通信,不需要IO/操作,没有拷贝内存的操作, Object -> ShareMemory -> Object 不需要IO,使用内存共享等方式 Kotlin inline fun 内联函数 TCP协议将数据包拆分,进行发送,保证网络数据的可…

基于纹理特征的kmeas聚类的图像分割方案

Gabor滤波器简介 在图像处理中&#xff0c;以Dennis Gabor命名的Gabor滤波器是一种用于纹理分析的线性滤波器&#xff0c;本质上是指在分析点或分析区域周围的局部区域内&#xff0c;分析图像中是否存在特定方向的特定频率内容。Gabor滤波器的频率和方向表示被许多当代视觉科学…

二十一、数组(3)

本章概要 Arrays的setAll方法增量生成 Arrays的setAll方法 在Java 8中&#xff0c; 在RaggedArray.java 中引入并在 ArrayOfGenerics.java.Array.setAll() 中重用。它使用一个生成器并生成不同的值&#xff0c;可以选择基于数组的索引元素&#xff08;通过访问当前索引&…

00、计算机视觉入门与调优简介

写在前面 每天更新1篇文章&#xff0c;共更新100篇以上 相关代码会放在gitee上 中间会按进度和反馈安排视频讲解 预计2023-11-11开始推送文章&#xff0c;持续3个月左右 专栏简介 本专栏带你从头开始入门计算机视觉。 内容会比之前写的文章更专业更全面&#xff0c;并且你…

Android项目更新依赖和打包步骤和问题汇总

目录 1、Android 项目打包&#xff0c;32位包升级到64位包问题一&#xff1a;ERROR: Conflicting configuration : armeabi-v7a,x86-64,arm64-v8a,x86 in ndk abiFilters cannot be present when splits abi filters are set : x86,armeabi-v7a,arm64-v8a 2、Android项目依赖升…

docker部署excalidraw画图工具(银角大王课堂使用的画图软件搭建)

环境搭建 安装docker&#xff08;不过多说&#xff0c;可以参照他人文档&#xff09; 安装docker-compose 运行以下命令以下载 Docker Compose 的当前稳定版本&#xff1a; sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose…

pytest-base-url插件之配置可选的项目系统URL

前言 ①当我们的自动化代码完成之后&#xff0c;通常期望可以在不同的环境进行测试&#xff0c;此时可以将项目系统的URL单独拿出来&#xff0c;并且可以通过pytest.ini配置文件和支持pytest命令行方式执行。 ② pytest-base-url 是一个简单的pytest插件&#xff0c;它通过命…

【数据结构】HashMap 和 HashSet

目录 1.哈希表概念 2冲突 2.1概念 2.2 冲突-避免 2.3冲突-避免-哈希函数设计 2.4 冲突-避免-负载因子调节 ​编辑 2.5 冲突-解决-开散列/哈希桶 2.5冲突严重时的解决办法 3.实现 4.性能分析 5.与Java集合类的关系 1.哈希表概念 在顺序结构中&#xff0c;元素关键码和存…