SpringCloud-高级篇(十)

news2024/11/29 5:40:45

(1)单节点Redis问题

 

缓存大家都不陌生,在企业里面只要做缓存都会用到Redis,我们在使用的时候都是做的单节点部署,单节点部署是存在一些问题的,分布式缓存正是Redis的集群,正是为了解决单节点部署的问题的 

单节点Redis存在的问题:

Redis是基于内存存储,并发能力非常强但是毕竟单节点,到了618等节日电商场景,还是无法满足高并发场景 

业务对Redis的依赖非常多,不仅仅把它做为缓存,有时候还把它作为分布式Session 等等,Redis应用场景如此的多,一旦它出现故障,对整个微服务影响范围也很大,我们得保证Redis集群是持续可用的,一旦集群中任何一个服务出现故障,不能够影响其他服务的使用,必须保证在运行的过程中去修复故障的节点实现在线边运行边修复的效果,单节点Redis做不到 

主从集群,从节点有很多个,多个从节点之间就是负载均衡,主从之间做读写分离,应对数据库中读写的互斥,做了读写的分离,读和写之间就不会有影响了,并发能力也就更强了,也满足高可用的效果,因为主宕机了还有从顶上去,进一步避免宕机导致的数据丢失,虽然书从节点很多但是一直挂下去总有一天会挂完,所以不仅人多做主从,还要保证一旦有人挂了要把它扶起来,故障恢复,就要靠哨兵机制了

我们做了主从集群,存储上限还是单个节点的存储上限,我们可以学习ES,在ES中我们把数据分片保存在不同的节点上,存储更多的数据,Redis搭建分片集群利用插槽机制实现数据分散还可以动态扩容

(2)Redis持久化-RDB

 

启动: 

Redis客户端建立连接: 

Redis在停机是自动执行Save:存储数据快照

按Ctrl +C:关机的时候执行的Save(同步)

数据快照默认保存在运行目录

重新启动Redis:会读取RDB快照文件

数据还在:

数据持久化都是停机后执行的,那么突然宕机了,没有做持久化,我们需要没隔一段时间,就做一下持久化,RDB默认就开启了,RDB是bgsave(异步):

修改了快照名称,当启动Redis的时候并没有数据恢复的日志:因为没有这个快照,有的话就会显示

此时再获取数据就没有了,因为快照名称修改了:

重新添加一个key:

看到Redis的日志: 进行了持久化

Redis如果设置策略时间太长,中间的这一段时间做了数据的写入没有持久化就会导致数据丢失,如果调短一些设置为1s,行不,不行的如果你的时间调的非常短,RDB执行的频率就会过高,每一秒执行一次,数据量小还好,如果数据量很大,10G写入磁盘,1秒执行一次根本忙不过来,因此来说时间也不能做的太短,也不能太长,使用默认的就可以了,如果在默认的时间内出现了数据丢失,怎么办呢?后面会学习其他的持久化方案AOF,对RDB进行一个弥补

(3)RDB异步持久化原理-Bgsave

bgsage开始fork主进程是得到子进程的时候,是阻塞的,此时主进程只能干这件事,为了加快速度完成这件事,主进程尽快的去处理用户的请求避免阻塞时间过久,fork底层是怎么实现的呢?

之后是异步的

物理内存可以理解计算机的内存条,主进程实现对Redis的读写,肯定是在内存中操作,在Linux系统中所有的进程都没有办法直接操作物理内存而是由操作系统给每个进程分配一个虚拟内存主进程只能操作虚拟内存,操作系统会维护一个虚拟内存与物理内存之间的映射表称为页表,主进程操作虚拟内存,虚拟内存基于页表的映射关系,到物理内存中真正的存储位置,就能实现对物理内存数据的读写了

在fork的时候并不是把内存数据做拷贝,而是把页表做拷贝,子进程在操作虚拟内存时,根据页表跟主进程一样,一定能映射到相同的物理内存区域就可以实现子进程跟主进程的内存共享了,这样无需拷贝内存中的数据而实现内存共享这样速度就会非常的快,阻塞的时间也就非常的短了

这就是异步的持久化,是异步的子进程在写RDB的过程中,主进程也可以接收用户的请求去修改内存中的数据,这个时候子进程在读,主进程在写,会有冲突,为了避免fork底层会采用copy_on_write的机制

主进程可能会在子继承复制的过程中,可能会修改到每一份数据,此时所有的数据都会拷贝一份,此时以为这Redis对内存的占用也就翻倍了  ,这是极端的情况,有可能会发生。 

(4)Redis持久化-AOF

RDB持久化有可能导致数据丢失的 ,因为它两次持久化时间间隔较长,下面学习AOF持久化,他可以弥补RDB

禁用RDB:save=“”

开启AOF:

 

重启Redis:Redis并没有读取数据

重新存一个数据 

生成一个aof文件

停止Redis:

重启数据会加载AOF

AOF 会记录所有命令,体积会比RDB大,因为一个可以可能重复操作多次,当重启的时候,它会一次执行命令,此时很多命令是重复的,执行没有意义

解决:

有了AOF要RDB干嘛?RDB充当的是备份的作用,把数据备份到磁盘,或者把数据拷贝放到别的而地方中去,其他机器其他机房,来实现异地容灾,如果说机房都毁了,AOF 就废了,但是把它拷贝到了别的机房,数据就能实现永远都能够恢复的,它起到了一种数据恢复的作用

 

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

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

相关文章

Linux调试工具—gdb

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:HEART BEAT—YOASOBI 2:20━━━━━━️💟──────── 5:35 🔄 ◀️ ⏸ ▶️ ☰ …

Django 学习教程- Django模板(Template)

系列 Django 学习教程-介绍与安装-CSDN博客 Django 学习教程- Hello world入门案例-CSDN博客 前言 在上一章节中我们使用django.http.HttpResponse() 来输出 "Hello World!"。该方式将数据与视图混合在一起,不符合 Django 的 MTV 思想。 本…

【Java进阶篇】JDK新版本中的新特性都有哪些

JDK新版本中的新特性都有哪些 ✔️经典解析✔️拓展知识仓✔️本地变量类型推断✔️Switch 表达式✔️Text Blocks✔️Records✔️封装类✔️instanceof 模式匹配✔️switch 模式匹配 ✅✔️虚拟线程 ✔️经典解析 JDK 8中推出了Lambda表达式、Stream、Optional、新的日期API等…

c++_08_操作符重载(操作符重定义) 友元

1 操作符标记 单目操作符&#xff1a; - -- * -> 等 双目操作符&#xff1a; - > < - << >> 等 三木操作符&#xff1a; ? : 2 操作符函数 2.0 前言 C编译器有能力把一个由操作…

Ubuntu之修改时区/时间

1、查看当前时间及时区状态 sudo timedatectl status # 显示当前时区为Asia/Shanghai 2、查看当前系统时间 sudo date 3、查看当前系统时间及时区 sudo date -R # 显示当前时间及对应时区&#xff0c;时区为“0800”北京时区 4、修改硬件时间 修改日期格式&#xff1a…

论虚继承的作用

虚继承 实验介绍 在上一小节中学习了多继承与多重继承,实际在开发的时候可能会遇到一种情况,既用到了多继承又用到了多重继承,这种继承方式通常又称为菱形继承。但这样一来就会产生新的问题,过多消耗空间。希望通过本小节学习能知道菱形继承以及产生的问题和解决方式。 …

buuctf-Misc 题目解答分解103-105

103.[GKCTF 2021]签到 追踪流发现类似flag 字符 f14g 下面有大量的是16进制字符 64306c455357644251306c6e51554e4a5a3046355355737764306c7154586c4a616b31355357704e65556c7154586c4a616b31355357704e65556c7154586c4a616b31355357704e65556c7154586c4a616b31355357704e655…

动态内存管理篇

为什么要动态内存分配&#xff1f; 之前&#xff0c;我们向内存申请空间&#xff0c;有两种方式&#xff0c;一种是定义变量&#xff0c;一种是建立数组&#xff1b;但是&#xff0c;这两种方式都有缺陷&#xff0c;创建的空间大小是固定的&#xff0c;在程序的运行过程中&…

操作系统(Operator System)

这里写目录标题 1. 什么是操作系统2. 主要功能3. 计算机的层状结构4. 什么叫做管理5. 总结6. 为什么要有操作系统7. 最后 1. 什么是操作系统 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运…

PostgreSQL PG的流复制搭建

注: 本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。【PostgreSQL】PG的流复制搭建 - 课程体系 - 云贝教育https://www.yunbee.net/Home/News/detail/article_id/510.html 一 、主备机…

HarmonyOS资源分类与访问

资源分类与访问 应用开发过程中&#xff0c;经常需要用到颜色、字体、间距、图片等资源&#xff0c;在不同的设备或配置中&#xff0c;这些资源的值可能不同。 应用资源&#xff1a;借助资源文件能力&#xff0c;开发者在应用中自定义资源&#xff0c;自行管理这些资源在不同…

仿网易云音乐网站PHP源码,可运营的原创音乐分享平台源码,在线音乐库系统

源码介绍 使用PHP和MYSQL开发的原创音乐分享平台源码&#xff0c;仿网易云音乐网站。用户可以在网站上注册并上传自己的音乐作品&#xff0c;系统内置广告系统&#xff0c;为网站创造收入来源。 安装教程 1.导入sql.sql 2.修改 includes\config.php 数据库信息和网址都改成…

【教3妹学编程-算法题】一年中的第几天

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开森。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;经过了一周多的寒潮&#xff0c;天气总算暖和些了。 2哥&#xff…

最新ChatGPT网站AI系统源码,附详细搭建教程/支持GPT4.0/AI绘画/GPT语言对话/DALL-E3文生图/自定义知识库

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

搭建 Mac系统Arduino + MindPlus开发环境

搭建 Mac系统Arduino MindPlus开发环境 1.概述 2024年1月1号&#xff0c;元旦大家的安排丰富多彩&#xff0c;在这一天中我的安排依旧坚持初心&#xff0c;牢记使命。学习是我的起点也是我的终点&#xff0c;只要活着就要用知识丰富自己的生活。 今天是一个有意义的日子&…

GVRP实验配置

GVRP&#xff08;GARP VLAN Registration Protocol&#xff09;&#xff0c;称为VLAN注册协议。 GVRP基于GARP的工作机制&#xff0c;是GARP的一种应用。GVRP用来维护交换机中的VLAN动态注册信息&#xff0c;并传播该信息到其它的交换机中。支持GVRP特性的交换机能够接收来自其…

Servlet见解3

13 Cookie和Session http协议是一个无状态的协议&#xff0c;你每一个跳转到下一个页面的时候都是需要先登录才能使用&#xff0c;这样就很麻烦比如淘宝&#xff0c;没有cookie和session的话&#xff0c;用户在首页已经登录上去了&#xff0c;但是需要再次登录才能选择商品&am…

无监督关键词提取算法:TF-IDF、TextRank、RAKE、YAKE、 keyBERT

TF-IDF TF-IDF是一种经典的基于统计的方法&#xff0c;TF(Term frequency)是指一个单词在一个文档中出现的次数&#xff0c;通常一个单词在一个文档中出现的次数越多说明该词越重要。IDF(Inverse document frequency)是所有文档数比上出现某单词的个数&#xff0c;通常一个单词…

JMeter(十六)-JMeter断言

十六、JMeter断言 1.简介 断言组件用来对服务器的响应数据做验证&#xff0c;常用的断言是响应断言&#xff0c;其支持正则表达式。虽然我们的通过响应断言能够完成绝大多数的结果验证工作&#xff0c;但是JMeter还是为我们提供了适合多个场景的断言元件&#xff0c;辅助我们来…

Redis原理及常见问题

高性能之道 单线程模型基于内存操作epoll多路复用模型高效的数据存储结构redis的单线程指的是数据处理使用的单线程,实际上它主要包含 IO线程:处理网络消息收发主线程:处理数据读写操作,包括事务、Lua脚本等持久化线程:执行RDB或AOF时,使用持久化线程处理,避免主线程的阻…