REDIS-持久化方案
我们知道redis是内存数据库,它的数据是存储在内存中的,我们知道内存的一个特点是断电数据就丢失,所以redis提供了持久化功能,可以将内存中的数据状态存储到磁盘里面,避免数据丢失。
Redis持久化有三种方案,分别是RDB、AOF、混合持久化;
RDB持久化(Redis DataBase)
RDB持久化是将某一时刻的内存快照(Snapshot)以二进制的方式写入磁盘。
触发方式:
手动触发
手动触发方式可以直接用命令save或者bgsave,这两个命令的区别是是否会阻塞Redis主线程执行。
save命令:在客户端直接执行save命令即可触发Redis的持久化,但是这种方式会使得Redis处于阻塞状态,直到RDB持久化完成,才会响应其它客户端发来的命令,所以一定要小心使用。
可以看到dump.rdb文件的时间变了,表示rdb文件被修改过,表示save触发成功了。
bgsave命令:英文名称是background save,看英文单词就知道是后台保存的命令,这种方式会fork()一个子进程来执行持久化,当子进程被创建之后,Redis主进程就可以响应其他客户端的请求了。
自动触发
自动触发的第一种方式就是在配置文件配置 save m n 意思就是在m秒内,如果有n个件发生变化,就会触发持久化;比如 save 20 1 意思就是在60秒内,至少有一个键发生变化就会触发持久化。
自动触发的第二种方式就是命令flushall,该命令是清空redis数据库的,要慎用,执行完这个命令之后就会自动触发持久化,但是这个持久化是把RDB的文件清空。
127.0.0.1:6379> flushall
OK
127.0.0.1:6379>
还有一种触发方式是主从同步触发,在redis主从同步复制中,当从节点执行全量复制操作时,主节点会执行bgsave命令,并将RDB文件发送给从节点,该过程会自动触发持久化。
配置RDB持久化:
在配置文件中配置:
#持久化条件
save 3600 1
save 300 100
save 60 10000
#该配置是说bgsave失败之后,是否停止持久化数据到磁盘
stop-writes-on-bgsave-error yes
#是否启用RDB文件压缩
rdbcompression yes
# 写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。
rdbchecksum yes
# RDB 文件名
dbfilename dump.rdb
# RDB 文件目录
dir ./
RDB文件恢复
当Redis服务器启动的时候,如果redis的根目录存在RDB文件dump.rdb,redis就会自动加载RDB文件恢复持久化数据。
可以看到redis在启动的时候已经正常加载了RDB文件。
RDB持久化优缺点
优点:
1,RDB的内容是二进制数据,那么它占用的内存将更小更紧凑,也更适合作为备份文件。
2,RDB持久化可以后台持久化数据到磁盘(fork一个子进程)。
3,RDB文件恢复速度比AOF文件恢复得要快。
缺点:
缺点就是RDB可能会存在少量数据丢失,因为这种持久化方式是相当于每隔一段时间进行持久化,所以会丢失一段时间内得redis数据;还有就是进行持久化得时候会fork一个子进程进行持久化,如果数据量特别大可能会导致服务端有短暂得停顿。
AOF持久化
AOF持久化,Append Only File,根据这个英文名称就可以看到是追加到文件;AOF持久化就是把Redis的每个键值对的操作都记录到文件中。
开启持久化
可以通过命令: config get appendonly 来查看是否开启了AOF持久化功能。
开启持久化:
Redis默认是关闭了AOF持久化的,想要开启可以使用命令行方式或者修改配置文件。
命令行开启AOF持久化
使用命令 config set appendonly yes
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "no"
127.0.0.1:6379> config set appendonly yes
OK
127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "yes"
注意:命令行启动AOF持久化之后,Redis就已经开启持久化了,无需重启;但是Redis重启之后失效。
配置文件启动AOF
在配置文件中添加:
appendonly yes
可以通过在客户端输入: config get dir 来获取配置文件所在位置。
这种配置方式需要重启redis之后才能生效。
触发持久化
有两种吃法方式:手动触发和自动触发
自动触发
有两种情况可以自动触发AOF持久化,(1)满足AOF设置的策略触发;(2),满足AOF重写触发。
第一种触发策略有三种:
1.always:每条redis操作命令都会写入磁盘,最多丢失一条数据。
2.everysec:每秒钟写入一次磁盘,最多丢失一条数据。
3.no:不设置写入磁盘规则,根据当前操作系统来决定何时决定写入磁盘,linux默认30s一次。
设置方式:在配置文件中配置
appendfsync everysec
AOF重写
因为AOF是通过记录redis的执行命令来进行持久化的,所以时间久了之后AOF文件会越来越大,这样启动服务器在恢复数据的时候也会比较慢,为了解决这个问题Redis提供了AOF重写功能。
所谓AOF重写就是去读取Redis服务器的状态,然后压缩保存为AOF文件。意思就是假如说我们在Redis设置了一个值 k,然后对这个值进行100次自增操作,如果不做AOF操作,那么文件中就有一百条对这个值操作的命令,而AOF重写之后,会记录最终的操作结果,这样就去掉了不必要的信息。
触发AOF 重写要满足两个条件,这两个条件在Redis配置文件中配置:
auto-aof-write-min-size: 允许AOF重写的最小文件容量,默认是64mb
auto-aof-rewrite-percentage:AOF文佳重写的大小比例,默认是100%,也就是只有当前AOF文件比上一次大一倍的时候才启动AOF文件重写。
数据恢复
一般情况下只要开启了持久化,并且正常提供了AOF文件,那么Redis在启动的时候就会自动加载AOF文件,进行数据恢复。
如果只开启了RDB持久化,那么Redis在启动的时候值会加载RDB文件。
如果两者同时开启了的花,Redis就只会加载AOF文件。
这种持久化的方式保存的数据更完整,根据选择只用不同的策略服务器最多可能会丢失1s内的数据,或者一条数据,默认是使用1s持久化一次的策略。AOF持久化有一个最大的缺点就是文件比较大,相比RDB持久化来说的话。在Redis负载较高的情况下RDB要比AOF性能好一些。
3.混合持久化
通过前面的介绍我们知道了RDB持久化和AOF持久化各有利弊,RDB持久化可能会导致一段时间的数据丢失,而AOF持久化形成的持久化文件比较大,启动加载会比较久。那么混合持久化结合这两种持久化的方式,来规避它们的缺点(混合持久化是在Redis 4.0版本之后才拥有的)。
开启混合持久化就是,基于AOF重写的时候,会把Redis当前的服务器数据以RDB格式写入到写入到AOF文件的开头,然年后续的梦里以AOF文件的格式追加到文件的末尾。这样每次重写就节省了更多的空间。
开启混合持久化
首先你可以在客户端输入命令:config get aof-use-rdb-preamble 来查看当前服务器是否开启了混合持久化。
通过命令行开启:
127.0.0.1:6379> config get aof-use-rdb-preamble
1) "aof-use-rdb-preamble"
2) "no"
127.0.0.1:6379> config set aof-use-rdb-preamble yes
OK
命令行开启方式存在的问题就是每次重启Redis服务器都得手动开启。
通过配置文件开启:
只需要更改配置文件中的:
aof-use-rdb-preamble no #将no 改为yes即代表开启了
4.总结
对于Redis持久化我简单总结了三种持久化方式,虽然没讲啥原理上的东西(因为我自己也不懂:>),但是仔细看把大致流程要在脑海里有个印象,最好安装个Redis自己看一下这些配置,跟着配置一下是最好的,以后当面试官问到的时候,要尽可能的多讲一点东西。因为Redis的确是一个很优秀的中间件,被广泛的运用到我们的几乎每个项目中。
相关文章:
REDIS-持久化方案
我们知道redis是内存数据库,它的数据是存储在内存中的,我们知道内存的一个特点是断电数据就丢失,所以redis提供了持久化功能,可以将内存中的数据状态存储到磁盘里面,避免数据丢失。 Redis持久化有三种方案,…...
五、Java框架之Maven进阶
黑马课程 文章目录1. 分模块开发1.1 分模块开发入门案例示例:抽取domain层示例:抽取dao层1.2 依赖管理2. 聚合和继承2.1 聚合概述聚合实现步骤2.2 继承 dependencyManagement3. 属性管理3.1 依赖版本属性管理3.2 配置文件属性管理(了解&#…...
1.前言【Java面试第三季】
1.前言【Java面试第三季】前言推荐1.前言00_前言闲聊和课程说明本课程介绍目前考核的变化趋势vcr集数和坚持学长谷粉面试题复盘反馈最后前言 2023-2-1 12:30:05 以下内容源自 【尚硅谷Java大厂面试题第3季,跳槽必刷题目必扫技术盲点(周阳主讲࿰…...
06分支限界法
文章目录八数码难题普通BFS算法全局择优算法(A算法,启发式搜索算法)单源最短路径问题装载问题算法思想:队列式分支限界法优先队列式分支限界法布线问题最大团问题批处理作业调度问题分支限界法与回溯法的区别: &#x…...
Docker Compose编排
一、概念1、Docker Compose是什么Docker Compose的前身是Fig,它是一个定义及运行多个Docker容器的工具通过 Compose,不需要使用shell脚本来启动容器,而使用 YAML 文件来配置应用程序需要的所有服务然后使用一个命令,根据 YAML 的文…...
Docker进阶 - 11. Docker Compose 编排服务
注:本文只对一些重要步骤和yml文件进行一些讲解,其他的具体程序没有记录。 目录 1. 原始的微服务工程编排(不使用Compose) 2. 使用Compose编排微服务 2.1 编写 docker-compose.yml 文件 2.2 修改并构建微服务工程镜像 2.3 启动 docker-compose 服务…...
福利篇2——嵌入式岗位笔试面试资料汇总(含大厂笔试面试真题)
前言 汇总嵌入式软件岗位笔试面试资料,供参考。 文章目录 前言一、公司嵌入式面经1、小米1)面试时长2)面试问题2、科大讯飞1)面试时长2)面试题目3、其余公司面经二、嵌入式笔试面试资料(全)三、嵌入式岗位薪资报告四、硬件岗位薪资报告一、公司嵌入式面经 1、小米 1)…...
[ubuntu]LVM磁盘管理
LVM是 Logical Volume Manager(逻辑卷管理)的简写,是Linux环境下对磁盘分区进行管理的一种机制,由Heinz Mauelshagen在Linux 2.4内核上实现。LVM可以实现用户在无需停机的情况下动态调整各个分区大小。1.简介 LVM本质上是一个…...
开源流程引擎Camunda
开源流程引擎Camunda 文章作者:智星 1.简介 Camunda是一个轻量级的商业流程开源平台,是一种基于Java的框架,持久层采用Mybatis,可以内嵌集成到Java应用、SpringBooot应用中,也可以独立运行,其支持BPMN&a…...
【PTA Advanced】1155 Heap Paths(C++)
目录 题目 Input Specification: Output Specification: Sample Input 1: Sample Output 1: Sample Input 2: Sample Output 2: Sample Input 3: Sample Output 3: 思路 代码 题目 In computer science, a heap is a specialized tree-based data structure that s…...
Educational Codeforces Round 129 (Rated for Div. 2)
A. Game with Cards. 题目链接 题目大意: Alice和Bob玩卡牌。Alice有n张,Bob有m张。第一轮选手出一张数字卡牌。第二轮另一个选手要选择一张比他大的,依此类推。谁没有牌可出则输。问Alice和Bob分别先手时,谁赢?输出…...
[数据库]表的增删改查
●🧑个人主页:你帅你先说. ●📃欢迎点赞👍关注💡收藏💖 ●📖既选择了远方,便只顾风雨兼程。 ●🤟欢迎大家有问题随时私信我! ●🧐版权:本文由[你帅…...
分享77个JS菜单导航,总有一款适合您
分享77个JS菜单导航,总有一款适合您 77个JS菜单导航下载链接:https://pan.baidu.com/s/1e_384_1KC2oSTDy7AaD3og?pwdzkw6 提取码:zkw6 Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj class ChinaZJsSeleni…...
kubernetes -- 核心组件介绍以及组件的运行流程
常用组件大白话说 如果想要官方的,详细的信息,请看官方文档。 https://kubernetes.io/zh-cn/docs/concepts/overview/components/ 现在介绍一些核心的概念: etcd:存储所有节点的信息,节点上部署的容器信息等都存在数…...
微信小程序Springboot短视频分享系统
3.1小程序端 用户注册页面,输入用户的个人信息点击注册即可。 注册完成后会返回到登录页面,用户输入自己注册的账号密码即可登录成功 登录成功后我们可以看到有相关的视频还有视频信息,我的信息等。 视频信息推荐是按照点击次数进行推荐的&am…...
排序算法学习
文章目录前言一、直接插入排序算法二、折半插入排序算法三、2路插入排序算法四、快速排序算法学习前言 算法是道路生涯的一个巨大阻碍。今日前来解决这其中之一:有关的排序算法,进行实现以及性能分析。 一、直接插入排序算法 插入排序算法实现主要思想…...
常见漏洞之 struts2+ jboss
数据来源 本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 01 Struts2相关介绍 》Struts2概述 》Struts2历史漏洞(1) 》…...
leetcode470 用Rand7()实现Rand10()
力扣470 第一步:根据Rand7()函数制作一个可以随机等概率生成0和1的函数rand_0and1 调用Rand7()函数,随机等概率生成1,2,3,4,5,6,7 这时我们设置:生成1,2&a…...
JSON数据解析商品详情API
大家有探讨稳定获取商品主图、jiage、标题,及sku的完整解决方案。这个引起了我技术挑战的兴趣,然后各种网上资料查询,最终还是不负努力,找到更好的解决方案,不再出现任何滑块验证码,完全绕过,实…...
服务端开发Java面试复盘篇1
上周投了一些简历,约了8-9家面试,其中完成了3家的第一轮面试,由于面试的是Java 的实习生,感觉问的题目都比较基础,不过有些问题回答的不是很好,在这里对回答的不太好的题目做一下总结和复盘。 目录 一、后…...
Android框架WiFi架构
同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 一、wpa_supplicant:wpa_supplicant本身开源项目源码,被谷歌收购之后加入Android移…...
rt-thread 移植调试记录
rt-thread 移植调试记录 记录rt-thread移植的过程。这里移植仅仅是利用rt-thread源码目录已经移植好的文件,组建自己的工程,不需要自己编写汇编完成底层移植。 1. 搭建基础工程 这里使用的是正点原子的潘多拉开发板,MCU为stm32l475。需要先…...
红外线额温枪与红外线温度传感器的原理分析
额温枪主要针对测量人体额温基准而设计,使用也非常简单方便。测体温可以达到一秒即可准确测量。并且不需要接触人体,隔着空气即可一键测温。非常适合家庭、学校、企业等场所。 但是由于其精度原因(一般为 0.2 ℃,也有更低的&#…...
2023牛客寒假算法集训营4
目录A. [清楚姐姐学信息论](https://ac.nowcoder.com/acm/contest/46812/A)(数学)B. [清楚姐姐学构造](https://ac.nowcoder.com/acm/contest/46812/B)(数学 构造)C. [清楚姐姐学01背包(Easy Version)](https://ac.nowcoder.com/…...
vue组合式API及生命周期钩子函数
一、组合式API 什么是组合式API? vue3中支持vue2的选项式、支持新的编程模式–函数式编程(没有this指针)做了一个兼容,可以在一个组件中使用函数式编程和OOP编程(选项式) setup()函数 可以使用setup属性…...
Python|每日一练|数组|回溯|二分查找|排序和顺序统计量|.update方法 |单选记录:组合总和|寻找峰值|编程通过键盘输入每一位运动员
1、组合总和(数组、回溯) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 t…...
minio下载文件速度很慢的原因分析与说明
文章目录1.实战背景2.问题描述3.问题分析4.问题解决1.实战背景 最近在做一个项目,需要用到minio来搭建文件系统,先简单说一下我在项目中设置的上传文件流程: 前端将分块文件逐一传给后端,后端再存储到 linux服务器的minio 当中。…...
基于comsol软件弯曲单模光纤模拟仿真
在本节中,主要基于实验室实际光纤单模圆柱光纤进行模拟,与comsol案例库文件在分析过程和建模有些差异: 模拟主要通过以下三个步骤进行:模型的几何构建、物理场的添加研究、结构处理分析来进行。 下面是第一步骤:几何…...
如何开启多个独立Chrome浏览器
一、简介 作为测试或者开发人员,有些情况下会用到 Chrome 浏览器,但有时是同一个 Chrome 浏览器无法为我们提供隔离开的不同环境。这样 我们就需要清理 cache 、切换账号等,降低了我们的工作效率。今天的主题是如何开启多个独立的 Chrome 浏…...
erp5开源制造业erp主要业务会计分录处理
erp5开源制造业erp主要业务会计分录处理 采购业务的会计分录 收到发票时 借:材料采购 (1201) 应交税费-应交增值税(进项税)(21710101) 贷:应付账款 (2121) 付款时 借:应付账款 (2121) 贷:银行存款 (1002) 入…...
如何做网站粘贴广告/在线友情链接
2023/4/6 疑问:1、使用mybatisplus进行字段匹配时发生字段不存在错误,不知道是不是因为xml中进行了字段映射,导致冲突。 2、使用分页查询时,某个条件包含多个字段时,不要只想着用eq(),可用in()。 3、在…...
凡科网怎么样可靠吗/sem 优化价格
整合ITIL&SOA,实践IT管理。Future S很有意思地将这两个看似不相干的概念放在一起。印象中收到邀请时对方只是提到SOA的概念。虽然现场的主题有些意外,但是也正好给了我一个了解二者关系的机会。 ITIL与SOA的关系是什么?是否存在相互依存的关系? -…...
做搜狗网站优化首页软/百度今日数据统计
我相信有些人在面试运维类岗位的时候会碰到对方问关于这方面的问题,我这里通过几个实验来复现这个情况,并做出相关分析,我希望大家看完后针对这种问题能有一个清晰思路。 服务器IPNginx192.168.10.40后端Web192.168.10.50我们使用一个flask制…...
青岛制作企业网站/长春seo顾问
1.配置httpd.conf 监听多个端口 #Listen 12.34.56.78:80 Listen 8081 Listen 8082 Listen 8083 可以通过netstat -n -a查看端口是否开启 2.开启虚拟站点 # Virtual hosts #Include conf/extra/httpd-vhosts.conf #修改为 # Virtual hosts Include conf/extra/httpd-vhosts.con…...
东营做网站建设的公司/百度收录方法
在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。…...
计算机应用技术(网站开发)/黄页网站推广
一、图像的基本操作 (1)读取图像 Img cv2.imread("xx.jpg") img的数据类型为ndarray的格式 (2)图像显示 可以多次调用,创建多个窗口 cv2.imshow("image",…...