redis的搭建及应用(二)-redis的持久化策略

Redis的持久化策略

image-20230613000829987

RDB

RDB持久化是指在指定的时间间隔内将redis内存中的数据集快照写入磁盘,实现原理是redis服务在指定的时间间隔内先fork一个子进程,由子进程将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储,生成dump.rdb文件存放在磁盘中。

默认开启,会按照配置的指定时间将内存中的数据快照到磁盘中,创建一个dump.rdb文件,Redis启动时再恢复到内存中。

RDB文件默认存储在: /data 目录中。

root@3f8f9d9b4353:/data# ls -lh
total 4.0K
-rw-r--r--. 1 redis redis 92 Nov 25 13:00 dump.rdb
image-20230613000909200
RDB工作机制
  • Redis提供了RDB持久化能力,这个功能可以将Redis在内存中的数据库状态保持在磁盘里面,避免数据意外丢失。
  • RDB持久化机制可以手动执行,也可以根据服务器配置选定定期执行操作,该功能可以将某一个时间点的数据快照进行保存到一个RDB文件中。
RDB优势和劣势
优势劣势
一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。
性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。
相比于AOF机制,如果数据集很大,RDB的启动效率会更高。
RDB常用参数
  • SAVE:由主进程进行快照,会阻塞其他请求。

  • BGSAVE:通过fork子进程进行快照,不会阻塞其他请求。

AOF

AOF 持久化功能则提供了一种更为可靠的持久化方式。 每当 Redis 接受到会修改数据集的命令时,就会把命令追加到 AOF 文件里,当你重启 Redis 时,AOF 文件里的命令会被重新执行一次,重建数据。AOF默认是关闭的。

image-20230613000932699

image-20230613000948156

因为AOF采用追加的方式,所以文件会越来越大,针对这个问题,新增了重写机制,就是当日志文件大到一定程度的时候,会fork出一条新进程来遍历进程内存中的数据,每条记录对应一条set语句,写到临时文件中,然后再替换到旧的日志文件(类似rdb的操作方式)。默认触发是当aof文件大小是上次重写后大小的一倍且文件大于64M时触发。

AOF优缺点
优点缺点
默认是每秒fsync一次。这样最多丢失1秒数据在相同的数据集下,AOF文件的大小一般会比RDB文件大。
AOF日志文件是一个纯追加的文件。就算服务器突然Crash,也不会出现日志的定位或者损坏问题在某些fsync策略下,AOF的速度会比RDB慢。通常fsync设置为每秒一次就能获得比较高的性能,而在禁止fsync的情况下速度可以达到RDB的水平。
当AOF文件太大时,Redis会自动在后台进行重写。重写很安全,因为重写是在一个新的文件上进行,同时Redis会继续往旧的文件追加数据。
AOF把操作命令以简单易懂的格式一条接一条的保存在文件里,很容易导出来用于恢复数据。

持久化配置

RDB

前提:

禁止aof: appendonly no,

修改备份时间: save 30 5

在第一个30s内添加数据
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> set b 2
OK
127.0.0.1:6379> set c 3
OK
127.0.0.1:6379> set d 4
OK
127.0.0.1:6379> set e 5
第二个30s内添加数据
127.0.0.1:6379> set xx 1
OK
127.0.0.1:6379> set yy 2
OK
127.0.0.1:6379> set cc 3
终止redis服务
[root@localhost ~]# ps -ef|grep redis-server
polkitd    4465   4443  0 21:27 pts/0    00:00:00 redis-server 0.0.0.0:6379
root       7237 125687  0 21:28 pts/2    00:00:00 grep --color=auto redis-server
[root@localhost ~]# kill -9 4465
重新启动redis

查看数据是否完整。

AOF
混合方式存储

aof-use-rdb-preamble yes

执行rewrite
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started

日志

29:C 08 Aug 2023 22:00:22.948 * AOF rewrite: 2 MB of memory used by copy-on-write
1:M 08 Aug 2023 22:00:22.975 * Background AOF rewrite terminated with success
1:M 08 Aug 2023 22:00:22.975 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB)
1:M 08 Aug 2023 22:00:22.975 * Background AOF rewrite finished successfully

image-20230808220403013

重新启动redis
1:M 08 Aug 2023 22:04:30.016 * Module 'bf' loaded from /usr/local/etc/redis/redisbloom.so
1:M 08 Aug 2023 22:04:30.016 * Reading RDB preamble from AOF file...
1:M 08 Aug 2023 22:04:30.016 * Loading RDB produced by version 6.2.6
1:M 08 Aug 2023 22:04:30.016 * RDB age 248 seconds
1:M 08 Aug 2023 22:04:30.016 * RDB memory usage when created 0.85 Mb
1:M 08 Aug 2023 22:04:30.016 * RDB has an AOF tail
1:M 08 Aug 2023 22:04:30.016 # Done loading RDB, keys loaded: 12, keys expired: 0.
1:M 08 Aug 2023 22:04:30.016 * Reading the remaining AOF tail...
1:M 08 Aug 2023 22:04:30.016 * DB loaded from append only file: 0.000 seconds
1:M 08 Aug 2023 22:04:30.016 * Ready to accept connections

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2023.12.28力扣每日一题——收集巧克力

2023.12.28 题目来源我的题解(参考力扣官方题解)方法一 枚举方法二 二次差分 题目来源 力扣每日一题;题序:2735 我的题解(参考力扣官方题解) 嗯……今天不会,就当一次搬运工吧。 方法一 枚举…

​c语言中%*d​

先看代码&#xff1a; #include <stdio.h> int main() {int i 0, j 0, k 0;scanf("%d%*d%d", &i, &j, &k);printf("i%d,j%d,k%d\n", i, j, k);return 0; } 输出结果&#xff1a; 原因&#xff1a; 在上述代码中&#xff0c;…

软件测试/测试开发丨学习笔记之Python控制流-分支、循环

分支判断 什么是分支判断 一条一条语句顺序执行叫做顺序结构分支结构就是在某个判断条件后&#xff0c;选择一条分支去执行 1. IF if condition_1:statement_block_1 elif condition_2:statement_block_2 else:statement_block_32. if 嵌套 在嵌套 if 语句中&#xff0c;可…

深度学习核心技术与实践之深度学习基础篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分 神经网络 生物神经元的特点 &#xff08;1&#xff09;人体各种神经元本身的构成很相似 &#xff08;2&#xff09;早期的大脑损伤&#xff0c;其功能可能是以其他部位的神经元来代替实现的 &#xff08;3&#x…

【C++篇】讲解string容器及其操作

文章目录 &#x1f354;简述string容器⭐字符串拼接操作⭐查找和替换⭐字符串比较⭐插入和删除⭐获取字串 &#x1f354;简述string容器 在C STL中&#xff0c;string是一个字符串容器&#xff0c;它封装了字符串相关的操作&#xff0c;提供了很多方便的方法来处理字符串。 具…

资深13年测试老鸟,性能测试-试准备过程总结,一文打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、必要性分析 分…

Java学习——设计模式——创建型模式1

文章目录 创建型模式单例饿汉式懒汉式存在的问题 工厂方法简单工厂模式工厂方法模式抽象工厂模式 创建型模式 关注点是如何创建对象&#xff0c;核心思想是要把对象创建和使用相分离&#xff0c;这样两者能相对独立地变换 包括&#xff1a; 1、工厂方法&#xff1a;Factory Met…

嵌入式Linux:提升VMware虚拟机运行速度的方法

使用虚拟机运行Linux操作系统通常会比在物理机上直接安装系统的运行效率更低&#xff0c;本篇博文将介绍如何优化虚拟机的设置&#xff0c;进而提升虚拟机性能体验。 第1步&#xff1a;选择VMware菜单&#xff1a;编辑–>首选项–>更新&#xff0c;将”启动时检查产品更新…

ClickHouse基础知识(二):ClickHouse 安装教程

1. 准备工作 1.1 确定防火墙处于关闭状态 1.2 CentOS 取消打开文件数限制 &#xff08;1&#xff09;在 hadoop101 的 /etc/security/limits.conf 文件的末尾加入以下内容 sudo vim /etc/security/limits.conf&#xff08;2&#xff09;在 hadoop101 的/etc/security/limits.…

IntelliJ IDEA使用EasyCode插件根据Mysql表自动生成代码文件(controller、service、dao、mapper.xml等)

一、Intellij安装EasyCode插件&#xff1a; 首先点击 Intellij->Preference->Plugins&#xff0c;然后搜索 EasyCode&#xff0c;点击安装&#xff1a; 二、添加项目 新建spring boot项目, easy-code-demo 这里以easy-code-demo为例 3 连接Mysql 通过 IDEA 上的 Dat…

【Java系列】多线程案例学习——基于阻塞队列实现生产者消费者模型

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录…

计算机中找不到vcruntime140.dll无法启动此程序怎么解决?

无法继续执行代码&#xff0c;因为找不到vcruntime140.dll”。那么&#xff0c;vcruntime140.dll是什么文件&#xff1f;它的作用是什么&#xff1f;当它丢失时会对电脑产生什么影响&#xff1f;本文将为您详细介绍vcruntime140.dll文件的相关知识&#xff0c;并提供五种解决vc…

2024年【低压电工】试题及解析及低压电工模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 低压电工试题及解析参考答案及低压电工考试试题解析是安全生产模拟考试一点通题库老师及低压电工操作证已考过的学员汇总&#xff0c;相对有效帮助低压电工模拟考试学员顺利通过考试。 1、【单选题】()仪表可直接用于…

Linux 查看系统类型和版本(内核版本 | 发行版本)

Linux 查看系统类型和版本 首先普及下linux系统的版本内容1. 查看linux系统内核版本2. 查看linux系统发行版本 首先普及下linux系统的版本内容 内核版本和发行版本区别 内核版本就是指 Linux 中最基层的代码&#xff0c;版本号如 Linux version 3.10.0-327.22.2.el7.x86_64发行…

项目经理面试10问

今天我们来说说项目经理专业面试的十条经验总结。如果你认真阅读并思考&#xff0c;相信对在屏幕前的你会有所帮助和启发。 1、请做一下自我介绍 自我介绍很重要。无论面试什么岗位&#xff0c;面试官通常都会问你一个最常见的问题&#xff1a;“请做一下自我介绍。” 在准备…

信号与线性系统翻转课堂笔记15——离散LTI系统模型分析

信号与线性系统翻转课堂笔记15——离散LTI系统模型分析 The Flipped Classroom15 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、要点 &#xff08;1&#xff0c;重点&…

如何为前端编写单元测试?从这篇入门指南开始学习!

前言 对于现在的前端工程&#xff0c;一个标准完整的项目&#xff0c;通常情况单元测试是非常必要的。但很多时候我们只是完成了项目而忽略了项目测试。我认为其中一个很大的原因是很多人对单元测试认知不够&#xff0c;因此我写了这边文章&#xff0c;一方面期望通过这篇文章…

HPM6750开发笔记《第一个helloworld例程》

HPM_SDK的使用&#xff1a; HPM_SDK界面如下图 此处选择所支持的5款evk大家根据自己的板子选 此处选择想看的例程工程 此处可选择生成工程的类型 其中debug工程是在纯RAM中运行的&#xff0c;板子掉电后代码会被删除&#xff0c;用来测试比较合适 其中挂flash的工程有两种其中…

java设计模式学习之【解释器模式】

文章目录 引言解释器模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用表达式解析示例代码地址 引言 在我们的日常生活中&#xff0c;语言的翻译和理解是沟通的关键。每种语言都有自己的语法规则&#xff0c;而翻译人员和计算机程序需要理解并遵循这些规则来…

【将G2O库使用交叉编译移植到arm平台】

一 准备材料 1.下载好g2o的代码。下载地址&#xff1a;https://github.com/RainerKuemmerle/g2o 如果只是在Ubuntu系统上安装g2o&#xff0c;可以参考代码库中的readme.md。 2.下载suitesparse4.4.6. 选择4.4.6版本是因为我发现ROS系统中使用的是这个版本。即使用sudo apt-get …