自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(234)
  • 资源 (8)
  • 收藏
  • 关注

原创 Nacos动态配置原理分析

Nacos动态配置原理分析Nacos源码流程图如下:1 流程分析1.入口:NacosConfigAutoConfiguration,首先看一下spring-cloud-starter-alibaba-nacos-discovery项目的结构,如图所示:2.看spring.factories中内容,优先加载装配的配置的源代码如下:org.springframework.cloud.bootstrap.BootstrapConfiguration=\org.springframework.cloud

2020-11-23 10:32:40 3

原创 微服务架构之配置中心

微服务架构之配置中心1 配置中心概念「配置中心」,顾名思义,就是用来统一管理项目中所有配置的系统。虽然听起来很简单,但也不要小瞧了这个模块。如果一个中型互联网项目,不采用配置中心的模式,一大堆的各类配置项,各种不定时的修改需求,一定会让开发同学非常头疼且管理十分混乱。我认为甚至可以直接用 “一个项目中是否有无采用「配置中心」”这一粗略的条件,来判断一个互联网研发团队是否规范和成熟。2 为什么需要配置中心?我们先来看看在没有「配置中心」的传统项目中,我们是怎么处理各类配置参数问题的:1.一般是静态化

2020-11-20 17:49:39 33

原创 设计模式(三)

设计模式(三)行为型模式重点关注对象之间的通信1 观察者模式1.1 定义观察者(Observer)模式定义:只多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并被自动更新,这种模式有时又称作发布-订阅模式、模型-视图模式,它是行为型模式。1.2 结构角色实现观察者模式时要注意具体目标对象和具体观察者对象之间不能直接调用,否则将使两者之间紧密耦合起来,这违反了面向对象的设计原则。观察者模式的主要角色如下。抽象主题(Subject)角色:也叫抽象目标类,它

2020-11-19 13:46:30 5

原创 微服务架构之服务调用

微服务架构之服务调用1 概念微服务中,很多服务系统都在独立的进程中运行,通过各个服务系统之间的协作来实现一个大项目的所有业务功能。服务系统间使用多种跨进程的方式进行通信协作,而RESTful风格的网络请求是最为常见的交互方式之一。思考:自己实现服务调用如何写?1.硬编码。不好。ip域名写在代码中。目的:找到服务。2.根据服务名,找相应的ip。目的:这样ip切换或者随便变化,对调用方没有影响。Map<服务名,服务列表> map;3.加上负载均衡。目的:高可用。spring clou

2020-11-18 15:46:21 4

原创 设计模式(二)

设计模式(二)结构型模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。1 代理模式1.1 代理模式定义代理模式又叫委托模式,是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他

2020-11-18 11:04:52 22

原创 设计模式(一)

设计模式(一)1 设计模式总览如图所示:2 创建型模式2.1 单例模式1.简介单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。2.要点1.某个类只能有一个实例。2.它必须自行创建这个实例。3.必须自行向整个系统提

2020-11-16 15:24:32 10

原创 Nacos服务注册原理分析

Nacos服务注册原理分析1 注册中心CAP架构CAP理论,如图所示:CAP三个元素(一致性、可用性、分区容忍性):一致性:所有数据备份在同一时刻具有同样的值,所有节点在同一时刻读取的数据都是最新的数据副本。可用性:在任何故障模型下,服务都会在有限的时间内处理完成并进行响应。分区容忍性:尽管有部分消息丢失系统仍可用。这三个要素最多只能同时实现两点不能三者兼顾,因此在做架构设计时必须做取舍,而分区容忍性必要的,所以在一致性和可用性取平衡,当前主流的是牺牲强一致性换区高可用性,只需保留最终一致性即

2020-11-16 11:20:07 7

原创 软件设计原则

软件设计原则在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。这 7 种设计原则是软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同。开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;里氏替换原则告诉我们不要破坏继承体系;合成复用原则告诉我们要

2020-11-15 11:23:07 67

原创 微服务架构之注册中心

微服务架构之注册中心1 微服务的注册中心注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。如图所示:注册中心的主要作用服务注册中心(下称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:1.服务发现 服务注册/反注册:保存服务提供者和服务调用者的信息 服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的

2020-11-14 20:10:34 74

原创 Spring Boot 整合Swagger实现API管理

Spring Boot 整合Swagger实现API管理1 Swagger介绍根据官网的介绍:https://swagger.ioSwagger 是一款RESTFUL接口的、基于YAML、JSON语言的文档在线自动生成、代码自动生成的工具。Swagger Inspector:测试API和生成OpenAPI的开发工具。Swagger Inspector的建立是为了解决开发者的三个主要目标。1.执行简单的API测试。2.生成OpenAPI文档。3.探索新的API功能。Swagger使用的注解及

2020-11-11 16:30:03 21

原创 Spring Boot 多数据源动态配置

Spring Boot 多数据源动态配置Spring Framework 为 SQL 数据库提供了广泛的支持。从直接使用 JdbcTemplate 进行 JDBC 访问到完全的对象关系映射(object relational mapping)技术,比如 Hibernate。Spring Data 提供了更多级别的功能,直接从接口创建的 Repository 实现,并使用了约定从方法名生成查询。1 默认数据源HikariDataSource1.打开IDEA工具如图所示的界面,点击Create New P

2020-11-09 14:00:03 8

原创 Spring Boot 实现多环境配置动态解析

Spring Boot 实现多环境配置动态解析1 什么是外部化配置?SpringBoot官方解释如下:Spring Boot lets you externalize your configuration so that you can work with the same application code in different environments. You can use properties files, YAML files, environment variables, and co

2020-11-07 14:28:12 42

原创 Spring Boot运行机制源码剖析

Spring Boot运行机制源码剖析1 SpringBoot入口程序1.SpringApplication运行的代码如下:@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}2.自定义SpringApplication1).通过Spr

2020-11-05 14:24:01 11

原创 Spring Boot 核心组件之Actuator

Spring Boot 核心组件之Actuator1 Actuator是干啥的?Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP跟踪等,帮助我们监控和管理Spring Boot应用。这个模块是一个采集应用内部信息暴露给外部的模块,Actuator可以使用HTTP或者JMX endpoints来浏览操作信息。大多数应用程序都是用HTTP,作为endpoint的标识以及使用/actuator前缀作为URL路径。因为暴露内部信息的特性,Actuato

2020-11-02 13:28:03 54

原创 Spring Boot 核心组件之Starter

Spring Boot 核心组件之Starter1 Starter介绍1.1 什么是Starterstarter可以理解成pom配置了一堆jar组合的空maven项目,用来简化maven依赖配置,starter可以继承也可以依赖于别的starter。 例如spring-boot-starter-web包含以下依赖:org.springframework.boot:spring-boot-starter org.springframework.boot:spring-boot-starter-to

2020-10-31 11:50:39 27 1

原创 分布式定时任务调度实战

分布式定时任务调度实战1 为什么需要定时任务我们先思考下面几个业务场景的解决方案:支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清算。电商整点抢购,商品价格8点整开始优惠。12306购票系统,超过30分钟没有成功支付订单的,进行回收处理。商品成功发货后,需要向客户发送短信提醒。类似的业务场景非常多,我们怎么解决?很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相互替换场景。如,

2020-10-30 08:36:53 152 2

原创 分布式锁解决方案实战

分布式锁解决方案实战1 为什么要学习分布式锁解决方案为了解决分布式架构带来的数据准确性问题!我们用synchronized或者 ReentrantLock 能解决问题吗?真实生产环境我们采用集群的方式去访问秒杀商品(nginx为我们做了负载均衡)。就会看到数据不一致的现象。如synchronized关键字的作用域其实是一个服务器进程(其实就是当前项目进程),在这个进程下面的所有线程都能够进行加锁。但是多进程就不行了。对于秒杀商品来说,这个值是固定的但是每个地区都可能有一台服务器。这样不同地区服务器

2020-10-30 08:36:27 24

原创 分布式事务解决方案实战

分布式事务解决方案实战1 数据库事务ACIDA:原子性(Atomicity)一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。就像你买东西要么交钱收货一起都执行,要么要是发不出货,就退钱。C:一致性(Consistency)事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确

2020-10-30 08:35:55 53 1

原创 Session跨域共享及SSO解决方案实战

Session跨域共享及SSO解决方案实战1 什么是Session跨域共享所谓session跨域就是摒弃了系统(如tomcat)提供的session,而使用自定义的类似Session的机制来保存客户端数据的一种解决方案。如:通过设置cookie的domain来实现cookie的跨域传递。在cookie中传递一个自定义的session_id。这个session_id是客户端的唯一标记。将这个标记作为key,将客户端需要保存的数据作为value,在服务端进行保存(数据库保存或NOSQL)。这种机制是Sess

2020-10-30 08:34:55 35 1

原创 分布式全局ID生成方案

分布式全局ID生成方案1 背景分布式架构下,唯一序列号生成是我们在设计一个系统,尤其是数据库使用分库分表的时候常常会遇见的问题。当分成若干sharding表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题。 在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十分重要的2 特性需求保证生成的ID全局唯一今后数据在多个Shards之间迁移不会受到ID生成

2020-10-29 14:26:39 12 1

原创 远程通信协议RMI原理

远程通信协议RMI原理1 前言在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS 等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了解RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它

2020-10-29 13:55:29 345 2

原创 序列化、反序列化原理和Protobuf实现机制

序列化、反序列化原理和Protobuf实现机制1 基本概念1.1 什么是序列化和反序列化(1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;(2)序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。(3)反序列化:客户端从文

2020-10-29 13:28:29 19

原创 HTTP以及HTTPS通信协议的原理分析

HTTP以及HTTPS通信协议的原理分析1 什么是HTTP1.1 HTTP与OSI模型HTTP全称:HyperText Transfer Protocol (超文本传输协议),是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。想了解http,就需要了解TCP,IP协议。因为http是基于TCP,IP层上面的。如下图OSI(Open Syst

2020-10-29 13:00:50 32 2

原创 分布式架构的发展及演进

分布式架构的发展及演进1. 为什么使用分布式架构1946年,世界上第一台电子计算机在美国的宾夕法尼亚大学诞生,它的名字是:ENICAC ,这台计算机的体重比较大,计算速度也不快,但是而代表了计算机时代的到来,再以后的互联网的发展中也有基础性的意义。计算机的组成是有五部分完成的,分别是:输入设备,输出设备,存储器,CPU里面有运算器和控制器,有一个冯诺依曼的模型非常形象的对象计算机的组成进行了描述,不过计算机也是有数据流,指令流,控制流来进行计算的和正常运转的。如图所示:ENIAC之后,电子计算机进入

2020-10-29 12:49:19 94 1

原创 并发工具类及线程池

并发工具类及线程池1 CyclicBarrier简介1.1 简介CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。CyclicBarrier(循环屏障) 直译为可循环使用(Cyclic)的屏障(Barrier)。它可以让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续工作。JDK中的描述:A synchronization aid that allows a set of threads

2020-10-29 12:38:42 6

原创 并发容器

并发容器1.1 什么是同步容器同步容器通过synchronized关键字修饰容器保证同一时刻内只有一个线程在使用容器,从而使得容器线程安全。synchronized的意思是同步,它体现在将多线程变为串行等待执行(但注意一点,符合操作不能保证线程安全。比如:A线程第一步获取尾节点,第二步将尾节点的值加1,但在A线程执行完第一步的时候,B线程删除了尾节点,在A线程执行第二步的时候就会报空指针)。1.2 什么是并发容器并发容器指的是允许多线程同时使用容器,并且保证线程安全。而为了达到尽可能提高并发,jav

2020-10-29 11:40:03 7

原创 并发理论及锁

并发理论及锁1.1并发在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。称之为并发。1.2 高并发短时间内会遇到大量的操作请求(比如:web系统集中大量访问,收到大量的请求。双十一、12306,会导致在短时间内会遇到大量的操作请求,如对资源的请求、数据库的操作)。1.3 高并发指标响应时间:系统对请求做出响应的时间。HTTP —>200ms吞吐量:在单位时间内处理请求的数量。吞吐量越高

2020-10-29 11:04:24 4

原创 Java并发理论知识

Java并发理论知识1.进程和线程进程:正在运行的程序的实例,具有一定独立功能的程序,关于某个数据聚合的一次运行活动。线程:进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每个线程执行不同的任务QQ:----进程发送信息接收信息发送文件 — 线程CPU、寄存器,RAM上下文:一个程序在得到CPU的时候,CPU就会去运行,在运行这个程序的时候,其他相关的资源,必须马上就位,包括内存资源、显卡。内存资源和显卡就是运行这个程序的执行环境,这个执行的环境就可以称为上下文。程序A:加载

2020-10-29 10:25:48 11 1

原创 Microservices 基础理论

Microservices 基础理论1 Martin Fowler微服务论文原文地址:https://www.martinfowler.com/articles/microservices.html微服务微服务风格的特性组件化(Componentization)与服务(Services)围绕业务功能的组织产品不是项目强化终端及弱化通道分散治理分散数据管理基础设施自动化容错性设计设计改进微服务是未来吗其它微服务系统多大微服务与SOA多语言多选择实践标准和强制标准让做对事

2020-10-29 09:58:01 416 3

原创 源码分析之委派模式与适配器模式

源码分析之委派模式与适配器模式1.1 适配器模式结构型:从程序的结构上实现松耦合,从而扩大整体的类结构,用来解决更多更大的问题。适配器模式(Adapter Pattern) 将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。适配器模式属于结构型模式。主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。如图所示:适配器模式的角色划分Target目标抽象类:定义客户所需的接口,可以是抽象类

2020-10-28 16:25:59 25

原创 深度剖析代理模式

深度剖析代理模式1.1什么是代理模式代理(Proxy)是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能.。这就符合了设计模式的开闭原则,即在对既有代码不改动的情况下进行功能的扩展。代理(模式如图所示:代理模式的实现方式:静态代理,工程师编辑代理类代码,实现代理模式;在编译期就生成了代理类。基于JDK实现动态代理,通过jdk提供的工具方法Proxy.newProxyInstance

2020-10-28 15:51:01 23

原创 工厂模式与原型模式

工厂模式与原型模式1.1简单工厂模式什么是创建型?创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑。是·针对用户,只需要关注结果,其实就是不关注产品的生产细节。简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工

2020-10-28 15:35:10 14

原创 源码分析之七大设计原则

源码分析之七大设计原则1…1 掌握设计模式的度?掌握设计模式的四个层次:1.没学之前是一点不懂,根本想不到用设计模式,写出的代码很糟糕;2.学了几个模式之后,于是总想着要用自己学过的模式,于是时常造成误用模式而自己却不知道;3.学完全部的模式之后,感觉模式之间都很相似,分不清差异,有困惑,但深知误用设计模式的害处,应用之时很犹豫。4.灵活应用模式,甚至不应用具体的某种模式也能设计出非常优秀的代码,以达到无剑胜有剑的境界。1.2 关于设计模式的一些理解1.设计模式,不是一种新的语言,也不是什么

2020-10-28 15:10:47 13

原创 基于Netty重构RPC框架

基于Netty重构RPC框架RPC:Remote Procedure Call 远程过程调用。常见的分布式RPC的框架:dubbo:2011年国内最开源的RPC框架,仅支持Java语言motan:微博内部使用的RPC框架 2016年开源的,仅支持Java语言Thrift:支持20多种语言gRPC:谷歌2015年对外开源的框架。支持很多语言目前流行的RPC框架:dubbo和SpringCloud。单一应用架构-- All in one —CURD 比如:58同城的站点。垂直应用架构-- We

2020-10-28 14:36:56 28

原创 Netty核心组件之二

Netty核心组件之二1 Netty心跳检测在Netty4中,使用IdleStateHandler实现心跳检测及空闲状态检测。我们知道使用netty的时候,大多数的东西都与Handler有关,我们的业务逻辑基本都是在Handler中实现的。Netty中自带了一个IdleStateHandler 可以用来实现心跳检测。心跳检测的逻辑本文中我们将要实现的心跳检测逻辑是这样的:服务端启动后,等待客户端连接,客户端连接之后,向服务端发送消息。如果客户端在“干活”那么服务端必定会收到数据,如果客户端“闲下来了

2020-10-28 14:09:40 3

原创 Netty核心组件之一

Netty核心组件之一1 Netty核心组件1.ChannelIO操作的一种连接,实体与实体之间的连接,实体可以是硬件,文件,网络套接字,或者是程序组件Channel 是 Netty 网络操作抽象类,它除了包括基本的 I/O 操作,如 bind、connect、read、write 之外,还包括了 Netty 框架相关的一些功能,如获取该 Channe l的 EventLoop。(这个 Channel 我们可以理解为 Socket 连接,它负责基本的 IO 操作,例如:bind(),connect()

2020-10-28 13:32:06 22

原创 IO模型及Netty线程模型

IO模型及Netty线程模型1 Netty简介1.1 简介版本:Netty4.X。Netty是基于NIO的异步网络通信框架。能快速的搭建高性能易扩展的网络应用程序(服务器/客户端)。Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients.Net

2020-10-28 13:14:02 35 1

原创 Redis高性能高可用集群

Redis高性能高可用集群1 前言本章节我们使用:Sentinel+Twemproxy+Keepalive+Redis搭建高可用集群.我们通过之前的学习发现了一个问题,哨兵模式虽然可以自动选举,但是选举的过程中会出现服务短暂不可用的问题,随意我们就在想,能不能使用通过多个集群的方式来实现负载均衡和故障转移呢?答案是可以的!各元素职责:Redis:缓存服务器。Sentinel:主要作用于redis的主从复制集群的master故障后从新选举新的master。Twemproxy:redis的负载均

2020-10-28 11:30:03 5

原创 缓存问题解决方案&批量查询优化

缓存问题解决方案&批量查询优化1 缓存问题解决方案1.1 缓存穿透缓存没有,数据库也没有,业务系统访问压根就不存在的数据,导致每次访问都将压力挂到了数据库服务器上导致服务崩溃,一般来说都是恶意访问导致解决方案:1.缓存空数据第一,空值做了缓存,意味着缓存层中存了更多的键,需要更多的内存空间(如果是攻击,问题更严重),比较有效的方法是针对这类数据设置一个较短的过期时间,让其自动剔除。第二,缓存层和存储层的数据会有一段时间窗口的不一致,可能会对业务有一定影响。例如过期时间设置为 5 分钟,

2020-10-28 10:01:57 26

原创 Redis缓存与数据库双写一致性解决方案

Redis缓存与数据库双写一致性解决方案1 需求起因在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库!好了,我们现在引入缓存的概念,那么访问路程变成了如下:上面这个经典的读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库间的数据一致性问题。有以下这些不一致的场景:1.当更新数据时,如更新某商品的库存,当前商品的库存是10

2020-10-27 15:09:53 32 2

Nacos动态配置原理分析|Nacos动态配置原理分析.pdf

客户端是通过一个定时任务来检查自己监听的配置项的数据的,一旦服务端的数据发生变化时,客户端 将会获取到最新的数据,并将最新的数据保存在一个 CacheData 对象中,然后会重新计算 CacheData 的 md5 属性的值,此时就会对该 CacheData 所绑定的 Listener 触发 receiveConfigInfo 回调。

2020-11-23

在CentOS环境下安装MySQL.pdf|在CentOS环境下安装MySQL.pdf

在CentOS环境下安装MySQL1.使用cd /usr/local进入local目录如图:2.使用如下命令下载MySQL的安装包

2020-08-21

IDEA安装mybatisCodeHelper插件.pdf

IDEA安装mybatisCodeHelper插件以及使用方法与步骤解决问题!激活工具解决问题.如何生成SQl语句等等!

2020-07-09

MyBatis-Plus入门.pdf

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2020-07-08

IDEA、方法.docx

IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写。所以,需要有JRE运行环境并配置好环境变量。 它可以极大地提升我们的开发效率。可以自动编译,检查错误。在公司中,使用的就是IDEA进行开发。

2020-05-07

流程控制语句以及判断和循环语句.docx

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果。有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现 我们要完成的功能。

2020-05-06

数据类型转换、运算符、方法入门.docx

在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升

2020-05-05

人们案例、常量、变量 .docx

第一个Java入门程序,主要是讲解Java入门以及main方法等作用,常量的种类分配,变量的4类八种,如何定义,使用及其注意事项等!

2020-05-05

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除