自定义博客皮肤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)
  • 收藏
  • 关注

原创 Redisson-分布式对象、分布式集合

这类映射的使用主要用于在特定的场景下,映射缓存(MapCache)上的高度频繁的读取操作,使网络通信都被视为瓶颈的情况。Write-behind(数据异步写入)策略:对映射的数据的更改会首先写入到Redis,然后再使用异步的方式,通过MapWriter对象写入到外部储存系统。Read-through策略:如果一个被请求的数据不存在于Redisson的映射中的时候,Redisson将通过预先配置好的MapLoader对象加载数据。当本地缓存映射的某条元素发生变动时,同时驱逐所有相同本地缓存映射内的该元素。

2023-11-14 18:09:09 234

原创 Redisson 简介

-Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。lettuceRedis客户端分布式对象、分布式集合分布式锁和同步器分布式服务。

2023-11-14 18:07:37 157

原创 设计模式介绍

使用场景需要创建一组相关的或相互依赖的对象是,将对象的关联关系的维护职责从调用者转移到抽象工厂中。一个系统要独立于他的产品的创建、组合和表示时一个系统要有多个产品系列中的一个来配置时当你要强调一些列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示他们的接口而不是实现时结构AbstractFactory:声明创建相关抽象产品对象的操作接口ConcreteFactory: 实现了创建具体产品对象的操作AbstractProduct: 一类产品对象的操作接口。

2023-11-13 20:56:17 313

原创 系统分析模式

2023-11-13 20:39:10 72

原创 认证服务-SpringSecurity及Oauth2介绍

OAuth2LoginAuthenticationFilter 和 OAuth2AuthorizationCodeGrantFilter区别在前者是针对登录,是 Spirng Security 认证的一个步骤,需要保存登录用户到回话中,而OAuth2AuthorizationCodeGrantFilter是一个独立功能的过滤器, 用于帮助完成AccessToken的获取, 两者都依赖于Spring Security对Oauth2功能支持的类。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

2023-11-09 21:12:07 275

原创 Spring Gateway网关服务分析

本章内容主要整理自官方文档,为SpringCloud的基本概念介绍和配置示例,如熟悉可忽略。

2023-11-09 19:55:36 228

原创 ES Query DSL-复合查询和关联查询

分离最大化查询,对多个查询条件返回的文档中,文档返回分数只返回查询匹配分数最大的分数, 比如一个查询关键字 A, 查询标题或内容中包含A的文档。为了在最大查询分数的前提下再考虑其他查询匹配, 比如标题中包含,并且内容中也包含的排名靠前,加入tie_breaker参数,将其他查询条件所得分数*tie_breaker,最后再加上最高分数为最终得分。关联查询,作用于join类型的文档域, Has child查询将返回满足查询的子文档对应的父文档。定义一个query,和一个或多个函数,重新计算返回文档的分数。

2023-11-09 19:49:30 130

原创 ES Query DSL-文本查询

match_phrase是短语搜索,使用文本分析器分析给定的短语(phrase),转换短语为一个完整的查询条件,而不是进行文本分析后的match查询。auto_generate_synonyms_phrase_query: 可选, 如果设置为true则自动生成同义的上术语查询。not_contained_by: (可选,查询对象)—filter中的interval不包含query的interval。containing: (可选,查询对象)—query的interval包含filter的interval。

2023-11-09 19:47:50 57

原创 ES客户端开发

should: 应该符合的条件, should中条件和must条件的区别在于, should中匹配的条件受,minimum_should_match参数的影响, 注意当shuold和must混合使用时,默认的minimum_should_match=0,因此shuold中制定的过滤条件不产生作用。mustNot: 查询中不能匹配的条件,该查询字块并不会过滤响应的文档, 而是文档对应分数得分为0。精确查询, 类似于term查询, 可以查询多个,和关系数据库的in查询类似。

2023-11-09 19:46:36 33

原创 ES集群知识

discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"] —— 配置单播发现的主节点ip地址,其他从节点要加入进来,就得去询问单播发现机制里面配置的主节点我要加入到集群里面了,主节点同意以后才能加入,然后主节点再通知集群中的其他节点有新节点加入。在开始阶段, 一个好的方案是根据你的节点数量按照1.5~3倍的原则来创建分片. 例如,如果你有3个节点,则推荐你创建的分片数最多不超过9(3x3)个。备份或称为副本,是指对主分片的备份。

2023-11-09 19:45:01 56

原创 ES基本概念和关键原理

文档的无模式的概念是指在类型映射中可以不预先定义字段的类型映射, 而ES在接收到文档中包含的新字段时会进行自动映射, 比如对于数字,可能映射为整形。英文的分词由与空格的存在有自然的分词效果, 而中文则复杂的多, 比如 我爱学习,如果每一个字都划分为词,则失去了学习这个词的语义, 因此中文需要使用专门的分词器来进行分析。ES集群中可以包含多个索引, 每个索引可以包含多个类型(目前已经弱化类型概念, 一个索引只允许一个类型,默认为_doc类型),每个类型可以存放多个文档,文档中包含多个字段。

2023-11-09 19:43:22 31

原创 ES Term Query

query” :“Term 查询” | 文本查询| 符合查询: {}“关联查询”:query object;如果是关联查询,则在关联查询下内嵌普通查询结构Query 表示文档和Query 条件的匹配分数,在_score 元数据中记录匹配值Filter 元素表示过滤,结果只有是或者否。Filter的表现形式为filter或must_not参数"query": {"bool": {"must": [],

2023-11-09 19:35:57 69

原创 Annotation Processor

Processor实现中实现该类的子类,覆盖注解目标对应类型的visit方法,如访问类结构的visitClassDef(JCClassDecl jcClassDecl)方法。当然答案有很多,比如 通过替换同名的类, 通过Spring的FactoryBean等扩展点替换掉类定义等。接口: 语法树的基础接口, 所有的语法块均实现该接口,提供访问者模式接口:<R, D> R accept(TreeVisitor<R, D> var1, D var2);但要进行扩展,增加参数。//创建新增域的get/set方法。

2023-11-09 19:32:39 63

原创 Maven插件介绍二

了解更多maven插件。。了解更多maven插件。。

2023-11-09 19:21:45 190

原创 Maven插件介绍一

Maven 将项目抽象为一个特定生命周期,基于生命周期及其特定阶段搭建框架,以插件的形式提供生命周期不同阶段的业务逻辑。

2023-11-09 19:18:02 31

原创 JUC包工具类介绍二

Callable接口定义一个异步任务,当Callable接口提交到ExecutorService进行异步执行时,返回结果通过Java Future获取。Callable接口同样可以获取任务执行时的异常。@OverrideCallable 和 Runnable的区别:两者都表示一个可以被其他线程执行的任务。Runnable的run方法没有返回值,任务发起线程也无法获取到任务执行中的已检查异常,只能获取到RuntimeException.而Callable可以获取返回值和异常。

2023-11-08 17:36:31 60

原创 JUC包工具类介绍一

BlockingQueue 多线程操作的队列抽象。线程对BlockingQueue的操作包括插入元素和获取元素。抛出异常型接口: add(o), remove(o), element(),当操作无法执行,抛出异常。返回操作结果型接口: offer(o) , poll(), peek(),返回操作的结果值,如操作失败不抛出异常,而返回特定值。阻塞型接口:put(o), take(), 当操作无法进行时,阻塞直到可行。

2023-11-08 17:35:25 53

原创 Redis 多机方案

主从服务器都维护自己同步的复制偏移量,服务器同步命令将将写入复制缓冲区, 当从服务器同主服务器建立连接进行数据同步时,检查偏移量,如果偏移量不一致,并且从服务器的偏移量还存在复制缓存区,则主服务器将从服务器偏移量之后的数据同步到从服务器即可,如果已经被清理出复制缓冲区,进行完全同步。当从节点收到主节点下线的消息, 将触发主节点的选举。集群中节点也按照主从概念划分为主节点和从节点, 主节点用于处理槽中键的命令, 从节点用于复制主节点,并在主节点下线后代替下线主节点继续处理命令。如不满足条件,拒绝写命令。

2023-11-08 17:30:05 237

原创 Redis 典型应用场景

列表本身的基础应用,如消息队列、任务队列等都可以通过Redis是达到分布式应用的目的, 如任务队列, 可以作为任务调动使用,A应用发布任务到任务队列, 工作应用使用阻塞或非阻塞的POP命令获取任务进行消息的消费或任务处理,另外RPOPLPUSH相关命令在获取队列的元素的同时原子性的将元素转移到目标队列(待确认队列), 可以实现消息消费的确认或任务执行的确认和重试。特定命令带来的业务支持: 如发布/订阅命令,过期命令应用于时效性应用,如订单占用等待支付,等。可以应用于限流、阈值等应用。

2023-11-08 17:28:04 113

原创 Redis 线程、持久化和监控

多路复用程序指的是单个线程监听多个套接字连接(Socket),当IO多路复用程序将多个Socket上的就绪事件放置于队列中, Redis主线程一次处理队列中事件,事件类型包括命令请求处理器(读取客户端发送指令,执行指令逻辑),命令回复处理器(向客户端发送响应),连接应答处理器(同客户端建立连接)。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。它的出现是为了弥补RDB的不足(数据的不一致性),采用日志的形式来记录每个写操作,并追加到文件中。使用了单线程后,提高了可维护性。

2023-11-08 17:25:43 108

原创 Redis 键值类型及其存储结构

数组中存储的是Key Hash函数对数组长度取模后相等的所有key组成列表的首元素,查找则是首先根据hash定位到数组位置所指向的列表首元素,然后遍历列表找到Hash值相等的key。第二种方式是保留原来的存储格式,就是除了具体数据外还保存这相关数据结构的信息,如散列表需要将散列表的大小、每个数据被散列到的槽的编号等信息,都保存在硬盘中。如上图删除元素7则将删除最底层的元素相应索引层中的索引7元素。当列表中存储的数据量比较小的时候,列表采用压缩列表的方式实现。键的数据类型是字符串,值的类型有:字符串、列表、

2023-11-08 17:23:40 105

原创 缓存-Spring Cache 缓存抽象

Spring Cache 抽象提供了对Java方法的缓存,使用Spring Cache缓存,当方法调用使用相同的参数,调用结果被缓存下来,当方法被再次调用时将直接返回参数结果。缓存中Key的生成实现。org.springframework.cache.Cache 提供Spring框架中使用的Cache的统一抽象功能, 具体的实现类使用实际的缓存解决方案。以上的注解都是方法级别的注解,@CacheConfig提供类级别的公共配置,该类下的方法级别配置如无指定则使用类级别上的@CacheConfig。

2023-11-07 19:18:45 320

原创 缓存-基础理论和Guava Cache介绍

缓存的容量和扩容缓存初始容量、最大容量,扩容阈值以及相应的扩容实现。缓存分类本地缓存:运行于本进程中的缓存, 如Java的 concurrentHashMap, Ehcache,Guava Cache。分布式缓存:支持分布式环境读取的缓存, 如Redis,另外还有其他特定场景的缓存,如:浏览器缓存、CDN、反向代理、数据库缓存。多级缓存缓存在系统中根据作用域形成的层次级的缓存,如mybatis的一级(sqlSession级)、二级缓存(跨sqlSession mapper级);

2023-11-07 19:13:49 538

原创 响应式编程-Project Reactor Mono 介绍

本文以Mono的角度来介绍Reactor编程,Flux的使用同理。本文对Reactor的Mono编程进行了初步的介绍,体现了响应式编程的核心在于异步序列的构建(Mono/Flux)和订阅使用。其中构建时对Mono/Flux的装配(Assembly)是整个编程模型的核心。

2023-11-07 19:11:13 773

原创 响应式编程-基本介绍

响应式宣言() 对响应式系统进行了定义:响应式系统是具备以下特质即时响应性(Responsive)、回弹性(Resilient)、弹性(Elastic)以及消息驱动()的系统。响应式是一种思维模式,核心在于异步和非阻塞。最初起源于IO模型的Reactor模型,并形成理念产生了各类响应式框架,贯穿整个系统使用的编程模式,从系统接受输入开始到完成完整的系统功能输出结果的完整过程中都是响应式的。图1主从多线程模型的Reactor线程模型。

2023-11-07 19:09:32 686

原创 访问控制、RBAC和ABAC模型

ABAC 的思想基于属性的、可扩展的、可灵活定制的一种访问控制规则引擎、类似如groovy、drools、js等执行引擎可以作为规则引擎的一种实现方式。而基于关系型数据库的数据控制可以将访问策略转换为SQL的属性查询条件, 如对象A的创建者可读策略对应的检查条件可能为:where A.creatorId=Subject.id。

2023-11-06 19:57:03 309

原创 软件设计模式的意义

而开模的费用是昂贵的,而且已经生产的产品也只能丢弃了,人们能看得到设计不完善带来的代价,因此通常都会有明确的设计环节,即使是再小的零件都有图纸,由车间工人按照图纸进行加工。从需求用户的角度,软件天生就应该可以持续修改的,运维和二开的开始阶段往往是可以很快满足变更需求的,也更加深了软件可以轻易修改的假象。而开模的费用是昂贵的,而且已经生产的产品也只能丢弃了,人们能看得到设计不完善带来的代价,因此通常都会有明确的设计环节,即使是再小的零件都有图纸,由车间工人按照图纸进行加工。

2023-11-06 19:54:20 183

原创 软件系统设计方法和工具介绍

在构建系统时,尤其是一些大项目实施的过程中,可以接触和学习一些高阶层面分析问题和系统架构的方法论, 如麦肯锡的解决问题7步法:定义问题、分解问题、排定优先级、制定工作计划、分析问题、综合分析、阐明观点;TOGAF的关键是架构开发方法(Architecture Development Method: ADM),业务流程设计方法、PMP项目管理流程等最佳实践和科学管理方法。在完成项目规划和高阶论证之后就是系统具体实现的设计的,本文分享和探讨理解需求建立系统模型的部分方法和工具的初步介绍。

2023-11-06 19:45:38 362

原创 应用系统集成-Spring Integration

其次:在特定系统的集成领域,都存在成熟和稳定的使用实践, 比如微服务网关、Http协议的Feign组件、 数据库的ORM模式、多级缓存等。Spring Integration 是系统集成的一个实现框架,提供了对EIP核心概念:Endpoint、Message、Channel、Router、Translator的抽象及相关框架实现,使得基于Spring Integration进行应用系统集成的应用开发专注于业务服务的实现,而能够轻便的使用集成相关的模式实现。如抽取未定的消息: 招标消息、报价消息、定标消息。

2023-11-06 19:42:48 215

原创 应用系统集成-企业集成模式(EIP)

当发送者指定消息的延迟级别后,RocketMQ将消息放入对应级别的存储队列,通过内置的时间服务检查各自延迟队列中的消息是否达到发送时间,达到后则进行发送。这种做法在本地事务仅仅和一次消息发送(或远程调用)时可用,但当本地涉及多个消息的发送时则某一个消息的事务将无法控制到其他消息发送的事务。比如由于本地事务的失败,可以回滚消息的发送。端点和客户端的区别:客户端实现的是具体中间件的通讯协议,而端点层在客户端和业务层之间,屏蔽客户端的差异性,提供统一的业务访问接口,将业务层的集成请求转换为具体中间件的通讯请求。

2023-10-24 16:11:34 375

原创 应用系统集成-概述

随着网络技术的发展和日益增长的软件复杂度,几乎已经不存在一个完全孤立的应用系统了,万物互联在应用层面就是系统互联,应用系统集成成为软件系统架构是需要考虑的核心问题之一。所有的应用系统集成都将面对以下挑战。网络可靠性:应用数据共享或功能调用从进程内通讯转变为网络通讯,网络信息交换的每一个环节都可能带来延迟或中断。网络速度慢:网络交互速度的数量级远比本地的高。应用系统的实现不同:不同应用系统的实现语言、操作平台和数据模型都不一样。集成点(接口)需要持续改变。

2023-10-24 16:06:16 148

原创 Spring AOP 详解及@Trasactional

AbstractAdvisingBeanPostProcessor 针对特定注解创建代理对象模式。扩展点BeanPostProcessor 的postProcessAfterInitialization方法中检查注解是否作用在Bean上,如是则创建代理。if (!基于FactoryBean机制,对通过XML配置的FactoryBean,针对目标Bean解析所得Advicsed对象。

2023-10-08 19:05:32 271 1

原创 访问控制、RBAC和ABAC模型

ABAC 的思想基于属性的、可扩展的、可灵活定制的一种访问控制规则引擎、类似如groovy、drools、js等执行引擎可以作为规则引擎的一种实现方式。而基于关系型数据库的数据控制可以将访问策略转换为SQL的属性查询条件, 如对象A的创建者可读策略对应的检查条件可能为:where A.creatorId=Subject.id。

2023-10-07 19:59:39 210

原创 实现动态业务规则的方法(Java)

企业信息化系统核心在于业务领域的概念模型及于此基础上复杂多变的业务规则,实现中通常抽象规则的接口方法,使用继承或策略等设计模式实现不同的业务规则的实现。从定标规则,从众多报价中选择最终报价的规则则在不同企业,不同商品都有则不同,如按最低价、按最高价(卖出场景)、按最快送货、按供应商评分等等可能的选择方式,在每次规则变化的时候重新迭代实现是一种方式,编写业务规则并支持动态替换执行是另一种选择。脚本引擎提供的是脚本执行能力,表达式引擎提供的是表达式计算能力,规则引擎是供以规则为核心的编程模型。

2023-09-26 20:01:32 416

原创 GraalJS及平台JS脚本能力建设

发布时,Nashorn是ECMAScript-262 5.1的完整实现,增强了Java和JavaScript的兼容性,并增加了新的ECMAScript 6(ES6)特性。基于业务模型数据经常需要开发特定数据发分析, 对于大数据场景可以使用大数据技术来进行数据挖掘和分析, 对于短周期或小批量的数据,基于灵活多变规则的实时分析可以考虑使用JS脚本来解决规则多变的问题。javax.script 脚本API由定义Java脚本引擎的接口和类组成,提供在Java应用程序中的使用脚本的框架。:基于底层引擎平台封装。

2023-09-25 20:53:28 970 1

原创 ES 客户端BulkProcessor代码解析-代码设计是什么?

优秀的代码设计是的产品高效、健壮和强扩展性。核心和变动点分开简洁而不简单的使用方式, 大家可以思考一下设计流行的做减法代表着什么?深入灵活的结构抽象。

2023-09-21 21:20:37 231

原创 分布式事务+ServiceCom Pack Saga介绍

分布式事务相关知识、Saga实现详解及示例

2023-09-12 20:24:35 1079

原创 Redis --- Jedis 使用简单示例

Redis --- Jedis 使用简单示例Jedis连接独立RedisJedisPoolConfig config =new JedisPoolConfig();       config.setMaxTotal(100);       config.setMaxIdle(20);       config.setMaxWaitMillis(1000);

2015-10-21 17:32:04 778

翻译 Redis --- Redis Cluster

Redis --- Redis Cluster 以下内容翻译自:http://redis.io/topics/cluster-tutorialRedis cluster tutorialThis document is a gentle introduction to Redis Cluster,that does not use complex to understand distr

2015-10-21 16:46:26 2433 1

原创 Java --- Xstream使用

Java --- XstreamXstream提供了Java对象和XML格式, JSON格式转换的支持。Xml支持基本使用简单实用示例        TestBean tb = new TestBean();       tb.setId(1L);       tb.setAge(20);       tb.setUserName("张三");

2015-10-21 16:44:08 4745

企业集成模式EIP介绍

企业集成模式EIP介绍

2023-11-13

空空如也

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

TA关注的人

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