SpringCloud-高级篇(十)

(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.hqwc.cn/news/314213.html

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

相关文章

个人简历范本(精选5篇)

HR浏览一份简历也就25秒左右,如果你连「好简历」都没有,怎么能找到好工作呢? 如果你不懂得如何在简历上展示自己,或者觉得怎么改简历都不出彩,那请你一定仔细读完。 个人求职简历第 1 篇 男 22 本科 AI简历 市场营…

在线课程学习管理

### 起步1. 使用 IDEA 导入项目 2. 执行 sql 目录下的online_study_system.sql 文件 3. 修改 mysql.properties 中数据库连接信息 4. 运行程序| 用户名| 密码 | | ------------- |:-------------| | admin | 123 | | 李老师 | 123 | | 张老师 | 123 | | 刘老师 | 123 | | 曹老师…

国际物流公司科普_集装箱种类区分和介绍_箱讯科技

集装箱运输的不断发展,为适应装载不同种类货物的需要,因而出现了不同种类的集装箱。今天和大家一起来总结一下。 按使用材料分类 根据箱子主体部件(侧壁、端壁、箱顶等)采用什么材料,就叫做什么材料制造的集装箱&…

C++ 类和对象 (中)

默认成员函数: C环境下每一个类在定义是时编译器会自动生成六个成员函数(在没有显示定义的情况下),分别是构造函数、析构函数、拷贝构造函数、赋值运算符重载、普通变量和const常量的取地址重载,它们大大弥补了原先C语…

【进阶KMP算法】nextval手算代码均有详解(每步配图)

这里是进阶,所以如果有小伙伴不知道KMP算法是什么的话,请看上一章(写的很清楚),故我这里概念什么的就不再过多描述。 引入: 要改进那么肯定要知道,哪里有不足,我们假设目标串s为“…

c# 捕获全部线程的异常 试验

1.概要 捕获全部线程的异常 试验,最终结果task的异常没有找到捕获方法 2.代码 2.1.试验1 2.1.1 试验结果 2.2 代码 2.2.1主程序代码 using NLog; using System; using System.Threading; using System.Windows.Forms;namespace 异常监控 {static class Program…

C++继承与派生——(8)多继承

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 苦难和幸福一样,都是生命盛…

Java API 操作Docker浅谈

背景: 使用com.github.docker-java库可以很方便地在Java中操作Docker。下面是一个详细的教程,包括创建镜像、创建容器、启动容器、停止容器和删除容器的步骤以及每一步的说明。 前提: 首先,在你的Java项目中添加com.github.doc…

gRPC之内置Trace

1、内置Trace grpc内置了客户端和服务端的请求追踪,基于golang.org/x/net/trace包实现,默认是开启状态,可以查看事 件和请求日志,对于基本的请求状态查看调试也是很有帮助的,客户端与服务端基本一致,这里…

c++写入数据到文件中

假设你想编写一个C程序&#xff1a;当你在调试控制台输入一些数据时&#xff0c;系统会自动存入到指定的文件中&#xff0c;该如何操作呢&#xff1f; 具体操作代码如下&#xff1a; #include<iostream> #include<string> #include<fstream> using namespa…

服务器硬件及RAID配置实战

目录 1、RAID的概念 2、RAID的实现方式 3、标准的RAID 3.1 RAID 0 3.2 RAID 1 3.3 RAID 5 3.4 RAID 10 4、建立硬件 RAID的过程步骤 1、进入RAID 1.1 重启服务器 1.2 进入RAID界面 1.3 在RAID界面切换目录 2、创建RAID 2.1 移动到RAID卡 2.2 按F2&#xff0c;选择…

AspectJWeaver之Gadget分析

前言&#xff1a; 今天看了下ysoserial的AspectJWeaver方法&#xff0c;分析了下其是如何通过调用SimpleCache$StorableCachingMap来实现写文件&#xff0c;这里把分析的流程写下来&#xff1a; 首先我们要看下其所需要的jar包&#xff1a; <dependencies><dependen…