redis--高可用之持久化

redis高可用相关知识

在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。

但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务( 如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。
 

redis持久化

1.持久化是什么

持久化是最简单的高可用方法,主要作用是数据备份,也就是把redis缓存中内存中的数据把他保存到本地的硬盘中。

特点:冷备份(必须要停服务才能数据备份)

2.持久化的两种方式

  • RDB持久化:原理是将Reids在内存中的数据库记录定时保存到磁盘上。(定时对内存中的数据生成快照,以文件形式保存在硬盘中)
  • AOF持久化(append only file):原理是将Reids 的操作日志以追加的方式写入文件,类似于MySQL的binlog。(类似于Mysql的二进制日志)(以追加的方式将写和删的操作命令记录到AOF文件中)
     

rdb的持久化

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

rdb的触发机制:

(1)手动触发

save命令和bgsave命令都可以生成RDB文件。

  • save命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在Redis服务器阻塞期间,服务器不能处理任何命令请求。
  • 而bgsave命令会创建一个子进程,由子进程来负责创建RDB文件,父进程(即Redis主进程)则继续处理请求。
  • bgsave命令执行过程中,只有fork子进程时会阻塞服务器,而对于save命令,整个过程都会阻塞服务器,因此save已基本被废弃,线上环境要杜绝save的使用。
     

save是使用主进程创建。杜绝使用!!!!!!!

示意图:

(2)自动触发

在自动触发RDB持久化时,Redis 也会选择bgsave而不是save来进行持久化。

自动触发最常见的情况是在配置文件中通过 save m n 指定当m秒内发生n次变化时,会触发bgsave。

bgsave:

bgsave就是主从复制的机制

创建一个子进程,让子进程创建rdb文件

bgsave特点:

主进程会通过fork机制创建一个子进程,子进程的创建过程中,主进程会阻塞,子进程创建完毕,主进程会停止阻塞。子进程来创建rdb文件。创建完成之后,通知主进程更新通知信息

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

若将修改为 save 60 2会有怎么样的结果?
Save 60 2 的含义是,60秒内,有两次更新才会记录bgsave

接下来60秒内创建2个以上的文件

如果只有一个创建然后exit,就会等待900秒

配置文件内有所更新,而且连带第一次的一起更新

AOF持久化

  • RDB持久化是将进程数据写入文件,而AOF持久化,则是将Redis执行的每次写、删除命令记录到单独的日志文件中,查询操作不会记录。
  • 当Redis重启时再次执行AOF文件中的命令来恢复数据。(重放命令进行恢复)
  • 与RDB相比,AOF的实时性更好,因此已成为主流的持久化方案。

AOF的开启配置

vim /etc/redis/6379.conf----700行---修改,开启AOFappendonly yes----704行---指定AOF文件名称appendfilename "appendonly.aof"----796行---是否忽略最后一条可能存在问题的指令aof-load-truncated yes   #Redis恢复时,发现AOF文件的末尾被截断了,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能发生redis机器运行崩溃,AOF文件的末尾被截断了,这种情况下,yes会继续执行并恢复尽量多的数据,而no会直接恢复失败报错退出。​​/etc/init.d/redis_6379 restart    #重启redisls /var/lib/redis/6379/      #查看是否生成了aof文件

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

  • appendfsync always:命令写入aof_buf后立即调用系统fsync操作同步到AOF文件。安全性高,性能低。
  • appendfsync no:当缓冲区被填满或超过了指定时限后(默认30秒),才将缓冲区的数据写入到硬盘里。性能高,但安全性低。
  • appendfsync everysec:每秒同步一次,是性能和数据安全性的平衡,因此是Redis的默认配置。
     
appendfsync always写入过程中,立即调用redis系统的fsync操作写入到aof文件,这次写入都执行同步,硬盘的性能有瓶颈。硬盘的寿命也会大大降低appendfsync everysec
命令写入,调用write操作,write操作结束后,线程会返回,fsync同步文件由专门的线程每秒调用一次。这是一个折中的策略,是性能和安全性的平衡,是redis的默认配置,也是推荐配置appendfsync no写入操作会调用系统的write操作,但是不对aof文件进行同步,操作系统来同步,同步周期是30秒,文件同步时间不可控,缓冲区会堆积大量数据,数据的安全无法保证

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的重写功能

  • 随着时间流逝,Redis服务器执行的写命令越来越多,AOF文件也会越来越大;过大的AOF文件不仅会影响服务器的正常运行,也会导致数据恢复需要的时间过长。
  • 文件重写是指定期重写AOF文件,减小AOF文件的体积。需要注意的是,AOF 重写是把Redis进程内的数据转化为写命令,同步到新的AOF文件;不会对旧的AOF文件进行任何读取、写入操作!
  • 关于文件重写需要注意的另一点是:对于AOF持久化来说,文件重写虽然是强烈推荐的,但并不是必须的;即使没有文件重写,数据也可以被持久化并在Redis启动的时候导入。因此在一些现实中,会关闭自动的文件重写,然后通过定时任务在每天的某一时刻定时执行。
     

注意:

重写会消耗性能,影响业务,不能在业务高峰期进行重写。所以一般会关闭自动重写,由定时任务在每天的某一时刻定时执行重写功能。

重写触发条件

  • 手动触发: 直接调用bgrewriteaof命令,该命令的执行与bgsave有些类似:都是fork子进程进行具体的工作,且都只有在fork时阻塞。------redis-cli bgrewriteaof
  • 自动触发: 通过设置auto-aof-rewrite-min-size选项和auto-aof-rewrite-percentage选项来自动执行BGREWRITEAOF。
     
  • 只有当auto-aof-rewrite-min-size和auto-aof-rewrite-percentage两个选项同时满足时,才会自动触发AOF重写,即bgrewriteaof操作。
vim /etc/redis/6379.conf----771行----771 auto-aof-rewrite-percentage 100772 auto-aof-rewrite-min-size 64mb​-----------------------以下是注释--------------------------------● auto-aof-rewrite-percentage 100  #文件的大小超过基准百分之多少后触发bgrewriteaof。默认这个值设置为100,意味着当前aof是基准大小的两倍的时候触发bgrewriteaof。把它设置为0可以禁用自动触发的功能。#即当前AOF文件大小(即aof_current_size)是上次日志重写时AOF文件大小(aof_base_size)两倍时,发生BGREWRITEAOF操作。#注意:例如上次文件达到100M进行重写,那么这次需要达到200M时才进行重写。文件需要越来越大,所以一般不使用自动重写。如果使用自动重写,需要定期手动重写干预一次,让文件要求恢复到100M。​● auto-aof-rewrite-min-size 64mb      #当文件大于64M时才会进行重写#当前aof文件大于多少字节后才触发。#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF
文件重写压缩AOF文件的原因
  • 过期的数据不再写入文件。
  • 无效的命令不再写入文件:如有些数据被重复设值(set mykey v1, set mykey v2)、 有些数据被删除了(set myset vl, del myset)等。
  • 多条命令可以合并为一个:如sadd myset v1, sadd myset v2, sadd myset v3可以合并为sadd myset v1 v2 v3。(sadd添加集合)
     

核心:

重写之后,aof文件当中命令减少了,内容自然减少,空间也少了,自然而然恢复速度也增加了(重写不是必须)

RDB和AOF的优缺点

RDB的优缺点

优点:

RDB文件紧凑,体积小,网络传输快,适合全量复制;恢复速度比AOF快很多。当然,与AOF相比, RDB最 重要的优点之一是对性能的影响相对较小。

(体积小,恢复速度更快,对性能影响较小。)

缺点

  • RDB文件的致命缺点在于其数据快照的持久化方式决定了必然做不到实时持久化,而在数据越来越重要的今天,数据的大量丢失很多时候是无法接受的,因此AOF持久化成为主流。
  • 此外,RDB文 件需要满足特定格式,兼容性差(如老版本的Redis不兼容新版本的RDB文件)。
  • 对于RDB持久化,一方面是bgsave在进行fork操作时Redis主进程会阻塞,另一方面,子进程向硬盘写数据也会带来IO压力。

(实时性差、兼容性差、在fork子进程时会阻塞父进程。)
 

AOF优缺点

优点:

  • 秒级持久化,一旦执行,立刻写入,兼容性好(命令写入),文本格式保存的命令。

缺点:

  • 文件大。恢复速度慢。AOF持久化需要频繁的向磁盘写数据,磁盘的I/O压力也很大。对redis主进程的性能也会有一定的影响。

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

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

相关文章

es的优势

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

白鳝:聊聊IvorySQL的Oracle兼容技术细节与实现原理

两年前听瀚高的一个朋友说他们要做一个开源数据库项目,基于PostgreSQL,主打与Oracle的兼容性,并且与PG社区版内核同步发布。当时我听了有点不太相信,瀚高的Highgo是在PG内核上增加了一定的Oracle兼容性的特性,一般也会…

vue和uni-app的递归组件排坑

有这样一个数组数据,实际可能有很多级。 tree: [{id: 1,name: 1,children: [{ id: 2, name: 1-1, children: [{id: 7, name: 1-1-1,children: []}]},{ id: 3, name: 1-2 }]},{id: 4,name: 2,children: [{ id: 5, name: 2-1 },{ id: 6, name: 2-2 }]} ]要渲染为下面…

11.15 监控目录文件变化

监视对指定目录的更改,并将有关更改的信息打印到控制台,该功能的实现不仅可以在内核层,在应用层同样可以。程序中使用ReadDirectoryChangesW函数来监视目录中的更改,并使用FILE_NOTIFY_INFORMATION结构来获取有关更改的信息。 Re…

打破传统束缚,释放服务潜能:本地生活服务商聚合系统引领行业新风向!

本地生活服务商聚合系统是一种集合多平台、多项目的创新型服务系统,它打破了传统服务商系统的一对一限制,为创业者和运营商带来了诸多优势。小多将深入探讨本地生活服务商聚合系统的优势。 随着互联网的快速发展,本地生活服务也迎来了蓬勃的发…

ESP32 http 请求

目录 参考教程1.使用的http连接2.使用Vscode-IDF创建http_request例程3.修改http_request_example_main.c函数4.已经获取到响应的数据 参考教程 ESP-IDF HTTP获取网络时间 1.使用的http连接 http://api.m.taobao.com/rest/api3.do?apimtop.common.getTimestamp请求可以得到…

Qt http

文章目录 前言1. 定义的接口2.connect信号槽3. get4. get 下载文件5. post 总结 前言 /* 1.请求报文: 请求报文是由客户端发送给服务器,用于请求特定资源或执行特定操作。它由以下几个部分组成: 请求行:描述了请求的方法、目标资源…

7-tcp 三次握手和四次挥手、osi七层协议,哪七层,每层有哪些?tcp和udp的区别?udp用在哪里了?

1 tcp 三次握手和四次挥手 2 osi七层协议,哪七层,每层有哪些 3 tcp和udp的区别?udp用在哪里了? 1 tcp 三次握手和四次挥手 # tcp协议---》处于osi7层协议的传输层,可靠连接,使用三次握手,四次挥…

Linux 安装多版本 JDK 详细过程

背景说明 服务器已安装jdk1.8,但随着spring全家桶的升级换代,已不满足使用,先要用高版本jdk,暂时不想卸载旧的版本,故安装两个版本,jdk1.8和jdk17,jdk1.8的已经安装过了,所以此次只安装jdk17,以及配置jdk切…

Android resource/drawable转换成Uri,Kotlin

Android resource/drawable转换成Uri,Kotlin private fun convertResource2Uri(resId: Int): Uri {return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE "://" resources.getResourcePackageName(resId) / resources.getResourceTypeName(resI…

kafka本地安装报错

Error: VM option ‘UseG1GC’ is experimental and must be enabled via -XX:UnlockExperimentalVMOptions. #打开 bin/kafka-run-class.sh KAFKA_JVM_PERFORMANCE_OPTS“-server -XX:UseG1GC -XX:MaxGCPauseMillis20 -XX:InitiatingHeapOccupancyPercent35 -XX:ExplicitGCInv…

〖大前端 - 基础入门三大核心之JS篇㊴〗- DOM节点的关系

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

【广州华锐互动】VR虚拟现实技术助力太空探险:穿越时空,探索宇宙奥秘

随着科技的不断发展,虚拟现实(VR)技术已经逐渐走进我们的生活。在教育领域,VR技术的应用也日益广泛,为学生提供了更加生动、直观的学习体验。本文将以利用VR开展太空探险学习为主题,探讨如何将这一先进技术…

安装第三方包报错 error: Microsoft Visual C++ 14.0 or greater is required——解决办法

1、问题描述 手动安装第三方软件时,可以使用setup.py,来安装已经下载的第三方包。一般文件下会存在setup,在所要安装库的目录下的cmd执行:python setup.py install报错:error: Microsoft Visual C 14.0 or greater i…

腾讯云COS+picgo+typora 图床搭建与自动上传

1、腾讯云 COS 腾讯云活动 COS新用户专享 COS 操作步骤 1、点击 创建桶,完善信息 点击下一步,剩下的配置可自己配置 2、picgo 官网地址 2.3.1版本下载地址 现在稳定版本是2.3.1 相关连接 腾讯云密钥设置地址picgo官网地址2.3.1版本下载地址

Fourier分析导论——第6章——R^d 上的Fourier变换(E.M. Stein R. Shakarchi)

第6章 上的 Fourier 变换 It occurred to me that in order to improve treatment planning one had to know the distribution of the at- tenuation coefficient of tissues in the body. This in- formation would be useful for diagnostic purposes and would con…

Excel数据可视化—波士顿矩阵图【四象限图】

EXCEL系列文章目录 Excel系列文章是本人亲身经历职场之后萌发的想法,为什么Excel覆盖如此之广,几乎每个公司、学校、家庭都在使用,但是它深藏的宝藏功能却很少被人使用,PQ、BI这些功能同样适用于数据分析;并且在一些需…

Revive开发商加入VR开源标准OpenXR

作为一款能让HTC Vive用户玩到Oculus平台游戏的软件,它的开发商CrossVR今日宣布即将加盟为VR和AR应用程序开源组织,即OpenXR。 由Khronos Group引领的OpenXR旨在创建一个标准化且免版税的应用程序编程接口(API),该API…

计算机毕业设计选题推荐-内蒙古旅游微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

代码随想录第六十三天 | 单调栈:寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标(暴力,双指针,单调栈)(84);代码随想录主要题目结束

1、寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标 1.1 leetcode 84:柱状图中最大的矩形 第一遍代码思路错了,如:输入[2,1,2],对于2,因为比栈顶元素1大,然后就会直接得出2(1&#xff…