Redis 哨兵模式详解

1.Redis哨兵模式概述哨兵模式是Redis的一种特殊模式,Redis哨兵作为一个单独的进程通过发送命令监测Redis服务器的心跳,从而判断运行的多个Redis实例是否正常运行,从而做出正确的响应。1.哨兵通过发送命令判断Redis服务器运行状态。2.当哨兵监测到master宕机,会将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。一个哨兵进程对Redis服务器进行监控,可能会出现问题,我们可以使用多个哨兵进行监控。各个哨兵之间还会互相进行监控,这样就形成了多哨兵模式。2.哨兵模式之故障切换假设主服务器宕机,哨兵A先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵A主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵B也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。故障切换成功后,会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。3.Redis配置哨兵模式配置3个哨兵和1主2从的Redis服务器...
  • ​650
  • ​​0​
  • ​​1
  • ​​2021-11-04

MySql基础复习之范式

1.第一范式(1NF)第一范式(1NF)是指**数据库表中的每一列都是不可分割的技术数据项**。同一列中不能有多个值,即实体中的某个属性不能有多个值,或者不能有重复的属性**简而言之就是无重复的列**例如:由“姓名”、“联系方式”。联系方式包含手机号和邮箱如果按照第一范式需要规范为(姓名、手机、邮箱)。2.第二范式(2NF)第二范式在第一范式基础上**要求每个数据库表中的每个实例或者行都能被唯一的区分**。为实现要求通常需要为表加**主键标识**。例如:选课关系表(学号、课程号、成绩、课程分)但由于课程分依赖于课程号,成绩依赖于学号。课程分和学号关系不大但是课程分的变更主表。解决方法是拆分成学生表(学号,课程号,成绩)和(课程号,课程分)。通过课程号外键关联。3.第三范式(3NF)如果关系模型R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。以学生表(学号,姓名,课程号,成绩)为例,其中学生姓名无重名,所以该表有两个候选码(学号,课程号)和(姓名,课程号),故存在函数依赖:学号——>姓名,(学号,课程号)...
  • ​591
  • ​​0​
  • ​​0
  • ​​2021-09-15

一文读懂LogStash

1.Logstash概述Logstash是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到设置的的“存储库”中。2.为什么使用Logstash某台服务器部署了多个实例,则需要去每个应用实例的日志目录下去找日志文件。每个应用实例还会设置日志滚动策略(如:每天生成一个文件),还有日志压缩归档策略等。如果我们能把这些日志集中管理,并提供集中检索功能,不仅可以提高诊断的效率,同时对系统情况有个全面的理解,避免事后救火的被动。所以日志集中管理功能就可以使用ELK技术栈进行实现。Elasticsearch只有数据存储和分析的能力,Kibana就是可视化管理平台。还缺少数据收集和整理的角色,这个功能就是Logstash负责的。3.Logstash工作原理(1)DataSource  Logstash支持的数据源有很多,如:SpringBoot中默认推荐logback支持日志输出功能(输出到数据库、数据出到文件)。(2)LogstashPipeline  Logstash中包含非常重要的三个功能:(1)Input:输入源,一般配置监听的主机及端口。DataSource...
  • ​411
  • ​​0​
  • ​​0
  • ​​2022-02-18

Flink从入门到实战(六) 安装与部署

1.部署模式Flink支持使用多种部署模式来满足不同规模应用的需求,常见的有单机模式,StandaloneCluster模式,同时Flink也支持部署在其他第三方平台上,如YARN,Mesos,Docker,Kubernetes等。2.单机模式单机模式是一种开箱即用的模式,可以在单台服务器上运行,适用于日常的开发和调试。2.1安装部署(1)前置条件Flink的运行依赖JAVA环境,需要预先安装好JDK,具体步骤可以参考:Linux环境下JDK安装。(2)下载&解压&运行Flink所有版本的安装包可以直接从其官网进行下载,这里下载的Flink的版本为1.9.1,要求的JDK版本为1.8.x+。下载后解压到指定目录:tar-zxvfflink-1.9.1-bin-scala_2.12.tgz-C/usr/app不需要进行任何配置,直接使用以下命令就可以启动单机版本的Flinkbin/start-cluster.sh(3)WEBUI界面Flink提供了WEB界面用于直观的管理Flink集群,访问端口为8081:Flink的WEBUI界面支持大多数常用功能,如提交作业,取消作业...
  • ​384
  • ​​0​
  • ​​0
  • ​​2022-02-24

Java知识复习之反射

概述JAVA反射机制是在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。什么是Class类当一个类Class(不是对象)被加载后,Java虚拟机会自动产生一个Class对象该对象内封装了这个类的信息,通过这个Class对象我们可以进行一系列的操作。Class类的是Java反射机制的起点如对类进行实例化、调用方法等.1.获取Class对象Classdemo=Class.forName(“包路径”);2.获取类成员变量在Java反射机制中,成员变量一般叫做(Field),获取类中的成员变量实际上是获取其Field2.1获得类声明的所有字段Field[]fields=demo.getDeclaredFields();2.2根据字段名称获得某个字段Fieldfiled=demo.getDeclaredField(“account”);3.构造函数3.1获得类声明的所有构造函数Constructor[]constructors=demo.getDeclared
  • ​382
  • ​​0​
  • ​​0
  • ​​2021-08-05

数据结构精讲(二)栈与队列

概述栈和队列也是比较常见的数据结构,它们是比较特殊的线性表,因为对于栈来说,访问、插入和删除元素只能在栈顶进行,对于队列来说,元素只能从队列尾插入,从队列头访问和删除。栈栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫作栈顶,对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者相当于删除最后一个元素。栈有时又叫作LIFO(LastInFirstOut)表,即后进先出。下面我们看一道经典题目,加深对栈的理解很简单C选项不可能6比5先压入后弹出。队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。普通的队列是一种先进先出的数据结构,而优先队列中,元素都被赋予优先级。当访问元素的时候,具有最高优先级的元素最先被删除。优先队列在生活中的应用还是比较多的,比如医院的急症室为病人赋予优先级,具有最高优先级的病人最先得到治疗。
  • ​374
  • ​​0​
  • ​​0
  • ​​2021-08-07

RabbitMQ常见问题

1.消息堆积当消息生产的速度,远远大于消费的速度,就会造成消息堆积1.1消息堆积的影响(1)可能导致新消息无法进入队列(2)可能导致旧消息无法丢失(3)消息等待消费的时间过长,超出了业务容忍范围1.2产生堆积的原因(1)生产者突然大量发布消息(2)消费者消费失败(3)消费者出现性能瓶颈。(4)消费者宕机1.3解决办法(1)排查消费者的消费性能瓶颈(2)增加消费者的多线程处理(3)部署增加多个消费者(4)场景介绍2.消息丢失在实际的生产环境中有可能出现一条消息因为一些原因丢失,导致消息没有消费成功,从而造成数据不一致等问题,造成严重的影响。比如:在常见的电商业务中需要生成订单信息和扣减库存两个动作,如果使用RabbitMQ来实现该业务,那么在订单服务下单成功后需要发送一条消息到库存服务进行扣减库存,如果在此过程中,一条消息因为某些原因丢失,那么就会出现下单成功但是库存没有扣减,从而导致超卖的情况。消息丢失的场景主要分为:消息在生产者丢失,消息在RabbitMQ丢失,消息在消费者丢失。(1)在生产者丢失采用RabbitMQ发送方消息确认机制,当消息成功被MQ接收到时,会给生产者发送一个确认...
  • ​350
  • ​​0​
  • ​​0
  • ​​2021-11-02

Docker从入门到实战(一)概念

1.概述近几年来Docker开始大行其道,很多互联网关系开始跟风构建docker+微服务的架构体系。然而许多人根本不了它,docker是可以把linux按照名空间划分容器工具,每个容器只是个空间,里面需要运行什么东西,由镜像决定。2.物理机VS虚拟机VS容器2.1物理机物理机就像是一座别墅,有独立的地基,独立的花园,独立的庭院。2.2虚拟机:虚拟机就像是一套楼房,共享地基,共享花园,共享庭院。虚拟机非常重,构建速度慢,且占用资源多,一台物理机上只能起十来个虚拟机2.3容器:容器就像是太空舱,每套房间可放置多个太空胶囊,共享地基,共享花园,共享庭院、共享厨房、共享洗手间。专业的说法就是,容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在任何地方以相同的方式运行。容器之间共享同一套操作系统资源的,由于容器是共享主操作系统的内核,因此就无法在服务器上运行与主服务器不同的操作系统,也就是说不能在**Linux的服务器上运行Windows**。虚拟机相对于容器非常重,构建速度慢,且占用资源多,一台物理机上只能起十来个虚拟机3.容器的优势3.1隔离强过去:一个项目要上线通常地步骤是这...
  • ​349
  • ​​0​
  • ​​0
  • ​​2021-07-31

数据结构精讲(一)之数组与链表

线性表示最常用且最简单的一种数据结构,它是n个数据元素的有限序列。实现线性表的方式一般有两种,一种是使用数组存储线性表的元素,即用一组连续的存储单元依次存储线性表的数据元素。另一种是使用链表存储线性表的元素。即用一组任意的存储单元存储线性表的数据元素(存储单元可以是连续的,也可以是不连续的)数组实现数组是一种大小固定的数据结构,对线性表的所有操作都可以通过数组来实现。虽然数组一旦创建之后,它的大小就无法改变了,但是当数组不能再存储线性表中的新元素时,我们可以创建一个新的大的数组来替换当前数组。这样就可以使用数组实现动态的数据结构。代码1创建一个更大的数组来替换当前数组代码2在数组位置index上添加元素e数组实现的线性表优点在于可以通过下标来访问或者修改元素,主要缺点在于插入和删除的花费开销较大,比如当在第一个位置前插入一个元素,那么首先要把所有的元素往后移动一个位置。为了提高在任意位置添加或者删除元素的效率,可以采用链式结构来实现线性表。###链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,这些节点不必在
  • ​330
  • ​​1​
  • ​​0
  • ​​2021-07-20

Java知识复习之加密与解密

1.概述在现代社会信息传递非常普遍在传递信息时有很多内容是必须保密的比如密码、军事指令。如何让信息在传输过程中不被他人知道呢?加密就能完成这个功能,加密是以某种特殊的算法将原有的信息数据进行改变未知用户即使获得加密信息也无法知道信息的内容。2.术语(1)明文(Plaintext):需要被保护的消息(2)密文(Ciphertext):将明文利用一定的算法进行改变后的消息(3)被动攻击(PassiveAttack):获取密文,经过分析得到明文(4)主动攻击(ActiveAttack):非法入侵篡改,伪造等手段3.加密方式3.1单向加密单向加密在加密过程中,输入明文后直接由系统加密成密文不需要密钥。既然没有密钥就无法通过密文恢复成明文。主要是可以用于信息的鉴别在鉴别时重新输入明文,并经过同样的加密算法进行加密处理,得到密文后,然后看看密文和以前的密文是否相同。算法特点:(1)加密算法对同一个消息反复执行总得到相同密文。(2)加密算法生成的密文是不可预见的,密文和明文没关系。(3)明文的任何微小变化都对生成的密文有重大影响(4)具有不可逆性,及通过密文得到明文不可以单向加密算法复杂,通常在数据
  • ​301
  • ​​0​
  • ​​0
  • ​​2021-08-03

Redis常见的几大问题

1.Redis缓存使用redis的好处在项目中使用redis,主要是从**性能**和**并发**的角度考虑,在项目中碰到执行耗时持久,且结果不频繁变动的SQL,比如报表数据等,特别适合将运行结果放入缓存中,当用户请求时可以从缓存中读取,提高响应速度。还有就是在高并发的场景下,数据库请求过多导致连接异常。这时就需要使用redis做一个缓冲,防止请求过多导致程序宕机。2.使用redis有什么缺点使用Redis缺点主要存在以下几个方面缓存和数据库双写一致性问题,需要维持两端数据保持一致。缓存服务不稳定雪崩问题及key设置不合理导致击穿问题。占用服务器大量内存导致项目成本增高。redis在使用中会存在并发竞争问题3.redis为什么这么快redis虽然是单线程工作的,但是以为其是纯内存操作、**单线程操作避免了来回切换IO**、**采用了非阻塞I/O多路复用机制**。redis-client在操作的时候,会产生具有不同事件类型的socket。在服务端,有一段I/0多路复用程序,将其置入队列之中。然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中。4、redis的数据类型及常见使用场...
  • ​298
  • ​​0​
  • ​​0
  • ​​2021-11-04

Redis的持久化机制

1.概述Redis的高性能是因为其将所有数据都存储在了内存中,IO操作基于内存进行需要读取数据直接从内存调取,为了使Redis在重启之后仍然保证数据不会丢失,那么我们就需要把数据从内存同步到磁盘中,备份一下,这一过程就是持久化,Redis支持两种持久化方式,一种是RDB方式,另一种是AOF方式,我们可以单独使用其中一种,或着将这两种结合使用。(1)RDB方式(默认)在指定的时间间隔内,将内存数据快照备份至磁盘中。(2)AOF方式(默认)以日志的形式处理每一个写操作,Redis服务器启动时会读取日志构建初始化数据,保证启动后数据是完整的。2.RDB方式RDB技术实现步骤如下1.Redis执行fork命令创建子进程2.父进程继续处理client请求,子进程负责将内存内容写入到临时文件。OS的写时复制机制父子进程会共享相同的物理页面,当父进程处理写请求时OS会为父进程要修改的页面创建副本,进程的地址空间内的数据是fork时刻整个数据库的一个快照。3.子进程将快照写入临时文件完毕后,临时文件替换原来的快照文件,然后子进程退出。每次RDB都是将内存数据完整写入到磁盘一次,并不是增量同步。如果数据...
  • ​283
  • ​​0​
  • ​​0
  • ​​2021-11-04
系统公告
  • 编码客告用户说明书
  • 编码客社区评论规范
热点问答
  • 新的一年又开始了,为了新的目标!加油
    • 2022-02-27
    • 0
    • 0评论
  • 三年零二百九十三天,完成了手头所有的工作,完成了所有的交接任务,流程走完了,心情反而异常的平静,人生的旅途像坐在一辆公交车上一样,每一站的风景都不一样,带走美好的回忆,背上行囊继续前行!
    • 2022-02-11
    • 0
    • 0评论
  • 终于可以控制住左右手了!
    • 2022-02-07
    • 0
    • 0评论
  • 女足YYDS! 逆风翻盘太厉害了!
    • 2022-02-07
    • 0
    • 0评论
联系客服