自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 收藏
  • 关注

原创 Spring事务源码详解

Spring事务三大接口介绍PlatformTransactionManager: (平台)事务管理器TransactionDefinition:事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则TransactionStatus: 事务运行状态PlatformTransactionManager接口介绍Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持 久化机制所提供的相关平台框架的事务来实现。 Spring事务管理器的

2022-02-25 14:17:01 1595 1

原创 Netty精讲(二)编解码器、粘包拆包、心跳检测、零拷贝

Netty编解码Netty涉及到编解码的组件有Channel、ChannelHandler、ChannelPipe等,先大概了解下这几个组件的作用。ChannelHandlerChannelHandler充当了处理入站和出站数据的应用程序逻辑容器。例如,实现ChannelInboundHandler接口(或 ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据随后会被你的应用程序的业务逻辑处理。当你要给连接的客户端发送响应时,也可以从ChannelInbou

2022-01-18 11:25:48 296

原创 Netty精讲(一)

Netty初探NIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握Selector、 ServerSocketChannel、 SocketChannel、 ByteBuffer等。开发工作量和难度都非常大: 例如客户端面临断连重连、 网络闪断、心跳处理、半包读写、 网络拥塞 和异常流的处理等等。Netty 对 JDK 自带的 NIO 的 API 进行了良好的封装,解决了上述问题。且Netty拥有高性能、 吞吐 量更高,延迟更低,减少资源消耗,最小化不必要的内存复制等优点。Netty 现在都在

2022-01-17 15:07:12 268

原创 BIO,NIO,AIO精讲

IO模型精讲IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,AIOBIO(Blocking IO)同步阻塞模型,一个客户端连接对应一个处理线程缺点:IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源如果线程很多,会导致服务器线程太多,压力太大。应用场景:BIO 方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 但程序简单易理解。BIO代码示例服务端示例public cla

2021-12-29 17:18:11 167

原创 java23种设计模式(二十三) -- 解释器模式(行为设计模式)

解释器模式简介解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式是指给定一个使用规定格式和语法的语言,并且建立一个解释器来解释该语言中的句子。解释器本身就是一种按照规定的语法进行解析的方案,但是总体来说也是一种使用频率相对较低但学习难度较大的设计模式。结构抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方

2021-11-29 10:14:01 251

原创 java23种设计模式(二十二) -- 访问者模式(行为设计模式)

访问者模式简介访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。意图:主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。何时使用:需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。角色Visitor(抽象访问者):抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作,从这个操作的名称

2021-11-26 10:31:00 152

原创 java23种设计模式(二十一) -- 模板模式(行为设计模式)

模板模式简介模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。结构模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法

2021-11-25 14:44:20 184

原创 java23种设计模式(二十) -- 策略模式(行为设计模式)

策略模式简介策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。角色环境(Context)角色:持有一个Strategy的引用。抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。

2021-11-25 11:02:11 133

原创 java23种设计模式(十九) -- 状态模式(行为设计模式)

状态模式简介状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。角色结构状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式的示意性类图如下所示:状态模式所涉及到的角色有:环境(Context)角色,也称上下文:定

2021-11-25 10:26:00 548

原创 java23种设计模式(十八) -- 观察者模式(行为设计模式)

观察者模式简介定义在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。角色抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。具体被观

2021-11-24 16:12:38 116

原创 java23种设计模式(十七) -- 备忘录模式(行为设计模式)

备忘录模式简介备忘录模式是以可以恢复或者说回滚,配置、版本、悔棋为核心功能的设计模式,而这种设计模式属于行为模式。在功能实现上是以不破坏原对象为基础增加备忘录操作类,记录原对象的行为从而实现备忘录模式。这个设计在我们平常的生活或者开发中也是比较常见的,比如:后悔药、孟婆汤(一下回滚到0),IDEA编辑和撤销、小霸王游戏机存档。当然还有我们非常常见的Photoshop角色构成原发器类(Originator):创建一个备忘录对象,使用备忘录存储它的内部状态。负责人类(CareTaker):负责保存好

2021-11-24 11:09:23 118

原创 java23种设计模式(十六) -- 中介者模式(行为设计模式)

中介者模式简介中介者模式要解决的就是复杂功能应用之间的重复调用,在这中间添加一层中介者包装服务,对外提供简单、通用、易扩展的服务能力。这样的设计模式几乎在我们日常生活和实际业务开发中都会见到,例如;飞机????降落有小姐姐在塔台喊话、无论哪个方向来的候车都从站台上下、公司的系统中有一个中台专门为你包装所有接口和提供统一的服务等等,这些都运用了中介者模式。除此之外,你用到的一些中间件,他们包装了底层多种数据库的差异化,提供非常简单的方式进行使用。例如下面这个结构,如果每个元素两两之间要产生联系,关系就

2021-11-24 10:05:14 455

原创 java23种设计模式(十五) -- 迭代器模式(行为设计模式)

迭代器模式介绍迭代器模式,常见的就是我们日常使用的iterator遍历。虽然这个设计模式在我们的实际业务开发中的场景并不多,但却几乎每天都要使用jdk为我们提供的list集合遍历。另外增强的for循环虽然是循环输出数据,但是他不是迭代器模式。迭代器模式的特点是实现Iterable接口,通过next的方式获取集合元素,同时具备对元素的删除等操作。而增强的for循环是不可以的。这种设计模式的优点是可以让我们以相同的方式,遍历不同的数据结构元素,这些数据结构包括;数组、链表、树等,而用户在使用遍历的时候并不

2021-11-23 11:16:32 128

原创 java23种设计模式(十四) -- 命令模式(行为设计模式)

命令模式介绍命令模式在我们通常的互联网开发中相对来说用的比较少,但这样的模式在我们的日常中却经常使用到,那就是Ctrl+C、Ctrl+V。当然如果你开发过一些桌面应用,也会感受到这样设计模式的应用场景。从这样的模式感受上,可以想到这是把逻辑实现与操作请求进行分离,降低耦合方便扩展。命令模式是行为模式中的一种,以数据驱动的方式将命令对象,可以使用构造函数的方式传递给调用者。调用者再提供相应的实现为命令执行提供操作方法。可能会感觉这部分有一些饶,可以通过对代码的实现进行理解,在通过实操来熟练。在这个设计

2021-11-23 09:59:47 394

原创 java23种设计模式(十三) -- 责任链模式(行为设计模式)

责任链模式简介责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。举例击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。比如

2021-10-26 16:54:11 129

原创 java23种设计模式(十二) -- 代理模式(结构型设计模式)

代理模式简介代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪

2021-10-26 14:20:03 128

原创 java23种设计模式(十一) -- 享元模式(结构型设计模式)

享元模式介绍享元模式,主要在于共享通用对象,减少内存的使用,提升系统的访问效率。而这部分共享对象通常比较耗费内存或者需要查询大量接口或者使用数据库资源,因此统一抽离作为共享对象使用。另外享元模式可以分为在服务端和客户端,一般互联网H5和Web场景下大部分数据都需要服务端进行处理,比如数据库连接池的使用、多线程线程池的使用,除了这些功能外,还有些需要服务端进行包装后的处理下发给客户端,因为服务端需要做享元处理。但在一些游戏场景下,很多都是客户端需要进行渲染地图效果,比如;树木、花草、鱼虫,通过设置不同元

2021-10-25 15:20:19 344

原创 java23种设计模式(十) -- 外观模式(结构型设计模式)

外观模式概念介绍外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。角色及使用场景简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中,设计到3个角色。门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。子系统角色:实现了子系统的功能。它对客户角色和

2021-10-25 11:18:37 111

原创 java23种设计模式(九) -- 装饰器模式(结构型设计模式)

装饰器模式简介Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样。因此,装饰器模式具有如下的特征: 它必须具有一个装饰的对象。 它必须拥有与被装饰对象相同的接口。 它可以给被装饰对象添加额外的功能。用一句话总结就是:保持接口,增强性能。装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种。它与对象的适配器模式的异同点如下。 相同点:都拥有一个目标对象。

2021-10-22 15:26:08 131

原创 java23种设计模式(八) -- 组合模式(结构型设计模式)

组合模式简介用面向对象的方式来处理树形结构组合多个对象形成树形结构以表示具有“整体-部分”关系的层次结构。在组合模式中引入了抽象构件类Component,它是所有容器类和叶子类的公共父类。角色 Component抽象构件 可以是接口或抽象类 为叶子构件和容器构件对象声明接口 Leaf叶子构件 叶子节点没有子节点 Composite容器构件 容器节点包含子节点,其子节点可以是叶子节点,也可以是容器节点。组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(

2021-10-22 10:41:25 276

原创 java23种设计模式(七) -- 桥接模式(结构型设计模式)

桥接模式介绍桥接模式的主要作用就是通过将抽象部分与实现部分分离,把多种可匹配的使用进行组合。说白了核心实现也就是在A类中含有B类接口,通过构造函数传递B类的实现,这个B类就是设计的桥。桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。通俗来讲,桥接是一个接口,它与一方应该是绑定的,

2021-10-20 15:26:18 140

原创 java23种设计模式(六) -- 适配器模式(结构型设计模式)

适配器模式基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容从用户的角度看不到被适配者,是解耦的用户调用适配器转化出来的目标接口方法,适配器再调用被适配者

2021-10-20 13:51:46 116

原创 java23种设计模式(五) -- 单例模式(创建型设计模式)

单例模式介绍单例模式可以说是整个设计中最简单的模式之一,而且这种方式即使在没有看设计模式相关资料也会常用在编码开发中。因为在编程开发中经常会遇到这样一种场景,那就是需要保证一个类只有一个实例哪怕多线程同时访问,并需要提供一个全局访问此实例的点。综上以及我们平常的开发中,可以总结一条经验,单例模式主要解决的是,一个全局使用的类频繁的创建和消费,从而提升提升整体的代码的性能。8种单例模式实现静态类使用/** * [静态类使用] * 以上这种方式在我们平常的业务开发中非常场常见,这样静态类的

2021-10-19 15:48:53 1622

原创 java23种设计模式(四) -- 原型模式(创建型设计模式)

原型模式简介原型模式主要解决的问题就是创建大量重复的类,而我们模拟的场景就需要给不同的用户都创建相同的试卷,但这些试卷的题目不便于每次都从库中获取,甚至有时候需要从远程的RPC中获取。这样都是非常耗时的,而且随着创建对象的增多将严重影响效率。在原型模式中所需要的非常重要的手段就是克隆,在需要用到克隆的类中都需要实现implements Cloneable 接口。原型模式特点由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。目标对象是原型对象的一个克隆。也就是说,通过原型模

2021-10-19 15:13:26 133

原创 java23种设计模式(三) -- 建造者模式(创建型设计模式)

建造者模式简介建造者模式主要解决的问题是在软件系统中,有时候面临着”一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的过程构成;由于需求的变化,这个复杂对象的各个部分经常面临着重大的变化,但是将它们组合在一起的过程却相对稳定。结构在这个示意性的系统里,最终产品Product只有两个零件,即part1和part2。相应的建造方法也有两个:buildPart1()和buildPart2()、同时可以看出本模式涉及到四个角色,它们分别是:抽象建造者(Builder)角色:给出一个抽象接口,以规

2021-10-19 10:38:55 123

原创 java23种设计模式(二) -- 抽象工厂模式(创建型设计模式)

抽象工厂模式介绍抽象工厂模式与工厂方法模式虽然主要意图都是为了解决,接口选择问题。但在实现上,抽象工厂是一个中心工厂,创建其他工厂的模式。多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类可创建多个具体产品类的实例。即提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类。“一对多”的关系。类结构图:代码示例项目目录结构/** * 水果抽象接口 */public interface Fruit { void fruitI

2021-10-18 13:50:03 172 2

原创 java23种设计模式(一) -- 工厂方法模式(创建型设计模式)

工厂方法模式介绍工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。简单说就是为了提供代码结构的扩展性,屏蔽每一个功能类中的具体实现逻辑。让外部可以更加简单的只是知道调用即可,同时,这也是去掉众多ifelse的方式。当然这可能也有一些缺点,比如需要实现的类非常多,如何去维护,怎样减

2021-10-15 10:36:22 157

原创 RabbitMQ(四)重复消费/幂等性和有序性

幂等性首先,rabbitMQ并没有为消息的重复消费而设计一种解决方法,这个解决方法需要我们来根据业务自己实现,我整理了几种常见的解决方法。消息重复发送导致消息被重复消费的场景在生产者发送消息给rabbitMQ服务器的时候,有可能因为网络波动等情况,导致生产者收不到rabbitMQ服务器的应答,导致生产者再发送一条消息。也是因为网络波动等问题,导致rabbitMQ服务器在向消费者发送消息的时候,没有收到消费者的应答,重复向消费者发生消息。这两个场景,其实最终都是导致消费者重复消费多次消息

2021-10-14 10:08:03 396

原创 RabbitMQ(三)消费端ack机制

ACK机制什么是消息确认ACK如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失。为了确保数据不会丢失,RabbitMQ支持消息确定-ACK。ACK的消息确认机制ACK机制是消费者从RabbitMQ收到消息并处理完成后,反馈给RabbitMQ,RabbitMQ收到反馈后才将此消息从队列中删除。如果一个消费者在处理消息出现了网络不稳定、服务器异常等现象,那么就不会有ACK反馈,RabbitMQ会认为这个消息没有正常消费,会将消息

2021-10-14 09:52:37 851

原创 RabbitMQ(二)消息可靠投递

可靠投递先来说明一个概念,什么是可靠投递呢?在RabbitMQ中,一个消息从生产者发送到RabbitMQ服务器,需要经历这么几个步骤:生产者准备好需要投递的消息。生产者与RabbitMQ服务器建立连接。生产者发送消息。RabbitMQ服务器接收到消息,并将其路由到指定队列。RabbitMQ服务器发起回调,告知生产者消息发送成功。所谓可靠投递,就是确保消息能够百分百从生产者发送到服务器。为了避免争议,补充说明一下,如果没有设置Mandatory参数,是不需要先路由消息才发起回调的,服务器

2021-10-13 15:42:13 212

原创 MySQL(五)一致性非锁定读与一致性锁定读

一致性非锁定读一致性非锁定读是什么?这里我先给出一个最最最简单的解释:一致性非锁定读就是读快照!快照即当前行数据之前的历史版本,每行记录可能存在多个历史版本,或者说每行记录可能有不止一个快照数据,一般我们将这种技术称为 行多版本技术。而由于一个行记录可能对应着多个快照(历史版本),为此不可避免地会带来一系列的并发问题,如何解决这些并发问题,就是所谓的 多版本并发控制(MVCC)。在不同事务隔离级别下,读取的方式不同。只有在事务隔离级别 READ COMMITTED 和 REPEATABLE READ(

2021-10-13 10:52:38 219

原创 MySQL(四)多版本并发控制 ----- MVCC

前言InnoDB 存储引擎在事务隔离级别 READ COMMITTED 和 REPEATABLE READ(默认)下会开启一致性非锁定读,简单回顾下:所谓一致性非锁定读就是每行记录可能存在多个历史版本,多版本之间串联起来形成了一条版本链,这样不同时刻启动的事务可以无锁地访问到不同版本的数据。undo log 版本链一致性非锁定读是通过 MVCC(Multi Version Concurrency Control,多版本并发控制) 来实现的。事实上,MVCC 没有一个统一的实现标准,所以各个存储引擎的实

2021-10-13 10:17:01 142

原创 MySQL(三)锁 ----- 行锁和锁机制

InnoDB 锁机制InnoDB存储引擎支持行级锁其大类可以细分为共享锁和排它锁两类共享锁(S):允许拥有共享锁的事务读取该行数据。当一个事务拥有一行的共享锁时,另外的事务可以在同一行数据也获得共享锁,但另外的事务无法获得同一行数据上的排他锁排它锁(X):允许拥有排它锁的事务修改或删除该行数据。 当一个事务拥有一行的排他锁时,另外的事务在此行数据上无法获得共享锁和排它锁,只能等待第一个事务的锁释放除了共享锁和排他锁之外, InnoDB也支持意图锁。该锁类型是属于表级锁,表明事务在后期会

2021-10-12 14:44:24 181

原创 MySQL(二)锁 ----- 表锁

前言MySQL 里面的锁大致可以分成全局锁,表级锁,行锁这儿将讲一下表级锁表级锁MySQL 里面表级别的锁有两种:表锁,元数据锁(meta data lock,MDL)。表锁lock tables 表名 read;#该表可以读,不能ddl 和 dml 中增删改,只能读取表数据lock tables 表名 write;#既不能读,也不能写表锁的语法是 lock tables … read/write。与 FTWRL 类似,可以用 unlock tables 主动释放锁,也可

2021-10-12 14:00:37 1710

原创 MySQL(一)锁 ----- 全局锁

前言MySQL 里面的锁大致可以分成全局锁,表级锁,行锁这儿将讲一下全局锁全局锁全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。全局锁使用场景全局锁的典型使用场景是,做全库逻辑备份(mysqldump)。重新做主从时候

2021-10-12 10:02:34 685

原创 Redis的分布式锁实现方案

前言在Java中,关于锁我想大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常,我们以synchronized 、Lock来使用它。但是Java中的锁,只能保证在同一个JVM进程内中执行。如果在分布式集群环境下呢?分布式锁分布式锁,是一种思想,它的实现方式有很多。比如,我们将沙滩当做分布式锁的组件,那么它看起来应该是这样的:加锁在沙滩上踩一脚,留下自己的脚印,就对应了加锁操作。其他进程或者线程,看到沙滩上已经有脚印,证明锁已被别人持有,则等待。解锁把脚印从沙滩

2021-09-02 09:43:55 731

原创 Redis过期键通知(使用redis来实现延迟通知)

Redis 过期监听场景业务中有类似等待一定时间之后执行某种行为的需求 , 比如 30 分钟之后关闭订单 . 网上有很多使用 Redis 过期监听的 Demoredis配置把notify-keyspace-events Ex 这一行的注释打开项目demo工程项目结构如下图maven依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"

2021-09-01 14:44:59 3246 2

原创 Redis的五种数据类型

Redis 数据类型Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。String(字符串)string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,str

2021-09-01 11:28:57 876

原创 秒杀系统SpringCloud架构选型以及后台代码搭建(二)

eureka服务搭建euerka简单介绍1.什么是服务治理Springcloud封装了Netflix公司开发的Eureka来实现服务治理。服务治理管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务注册于发现。2.什么是服务注册与发现  Eureka采用CS架构。EurekaServer作为服务注册的服务器,它是注册中心。而系统中的其他服务,使用eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员可以通过eurekaserver来监控系统各个

2021-09-01 10:34:03 220

原创 秒杀系统SpringCloud架构选型以及后台代码搭建(一)

简介“秒杀”,就是在同一个时刻有大量请求争抢购买同一个商品,并完成交易的过程,其间涉及大量的并发读和并发写,并要求高可靠和高性能的系统支持。也因此,“秒杀”对于程序员来讲也意味着巨大的挑战。秒杀的三个可用性高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。本专栏将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库

2021-08-30 16:16:21 487 1

空空如也

空空如也

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

TA关注的人

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