自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

OceanSky的专栏

好记性不如烂笔头,内存虽快,但不持久

  • 博客(679)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 RabbitMQ学习笔记:集群和网络分区(Network Partitions)

集群成员之间的网络连接故障会影响客户机操作的数据一致性和可用性(如CAP定理)。由于不同的应用程序对一致性有不同的要求,并且对不可用性的容忍程度不同,所以可以使用不同的的分区处理策略。1.检测网络分区如果一个节点在一段时间内(默认是60秒)无法与对等端节点联系,则节点将认为其对等节点是否已关闭。如果两个节点重新接触,都认为另一个已关闭,则这些节点将确定已发生分区。将以如下形式记录到RabbitMQ日志:2020-05-18 06:55:37.324 [error] <0.341.0> .

2020-07-13 15:13:41 3152 1

原创 RabbitMQ学习笔记:RabbitMQ延迟队列(DLX、TTL及rabbitmq_delayed_message_exchange插件)

延迟队列存储的对象是对应的延迟消息,所谓的延迟消息是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费。延迟消息使用的场景有很多,比如:在订单系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,那么这个订单将进行异常处理,这时候就可以使用延迟队列来处理这些订单了。用户希望通过手机远程遥控家里的智能设备在指定...

2020-01-03 13:51:01 15199 10

原创 RabbitMQ学习笔记:CentOS7中安装RabbitMQ集群

安装rabbitmq的前提是 在CentOS7中,如果是在docker中安装,需要先创建镜像docker pull centos:7创建CentOS7服务器centos7docker run -itd --hostname rabbit1 --name centos7 -p 15672:15672 -p 5672:5672 -p 4369:4369 -p 25672:25672 cen......

2019-11-28 19:28:02 4660

原创 RabbitMQ学习笔记:使用Docker部署RabbitMQ集群

RabbitMQ本身是基于Erlang编写,Erlang语言天生具备分布式、高并发的特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天生支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过Zookeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞...

2019-11-05 19:18:58 9369

原创 测试学习笔记1:@SpringbootTest测试注解详解

在此案例中,spring boot会启动一个完整的spring应用上下文,并自动装配MysqlServiceTest类中所有的@Autowired类,通过@MockBean注解模拟真实需要的MysqlMapper实例对象,通过when、thenReturn模拟返回数据,避免调用真实的数据库实现。它主要用于集成测试,可以启动一个嵌入式的数据库,加载完整的spring上下文,并自动装配测试类的ApplicationContext。

2023-12-09 09:10:31 1640

原创 Redis学习笔记18:基于spring data redis及lua脚本的分布式锁

Redis分布式锁是一种在分布式系统中使用Redis实现的互斥锁。它可以确保在多个客户端同时访问共享资源时,只有一个客户端能够获取到锁,其它客户端需要等待或执行相应的逻辑。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-18 10:09:23 2287

原创 Redis学习笔记17:基于spring data redis及lua脚本批处理scan指令查询永久有效的key

Redis的KEYS和SCAN指令都可以用于在数据库中搜索匹配指定模式的键。然而,它们之间有一些关键的区别;KEYS指令会在整个数据库中阻塞地执行匹配操作,并返回匹配的键列表。如果数据库很大,或者匹配的键很多,将会对性能产生负面影响。而SCAN指令通过游标的方式逐步迭代数据库,每次返回一小部分匹配的键,不会阻塞数据库,可以在不影响其它操作的情况下进行遍历。KEYS指令会返回匹配的键列表,这可能会导致返回的结果集很大,可能会占用大量的内存。

2023-11-18 09:20:50 2434

原创 Redis学习笔记16:基于spring data redis及lua脚本通过TTL查询永久有效的key

Redis做为一个缓存服务,个人觉得不应该存在有永久有效的数据,要检索一个存在很久的redis服务器中存在哪些永久有效的key,可以通过lua脚本的方式实现;一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-18 09:19:47 1013

原创 Redis学习笔记15:基于spring data redis及lua脚本发送到redis服务器多久过期

在Redis服务器中,通过SCRIPT LOAD命令加载的脚本会被缓存,并且会一直保存在缓存中,直到服务器重启或者使用SCRIPT FLUSH名利手动清空缓存。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-18 09:18:38 558

原创 Redis学习笔记14:基于spring data redis及lua脚本ZSET有序集合实现环形结构案例及lua脚本如何发送到redis服务器

SHA1摘要是对lua脚本的内容进行哈希计算的结果。它是一个40个字符的十六进制字符串。在Redis中,使用SCRIPT LOAD命令可以将lua脚本加载到服务器,并返回一个SHA1摘要,这个摘要可以被用于后续的EVALSHA名利来执行脚本。SHA1摘要的作用是将脚本内容映射为一个唯一的标识符,以便在多次执行脚本时,可以通过传输摘要而不是完整的脚本内容来提高效率。"myvalue"

2023-11-18 09:17:17 700

原创 Redis学习笔记13:基于spring data redis及lua脚本list列表实现环形结构案例

工作过程中需要用到环形结构,确保环上的各个节点数据唯一,如果有新的不同数据到来,则将最早入环的数据移除,每次访问环形结构都自动刷新有效期;可以基于lua 的列表list结构来实现这一功能,lua脚本可以节省网络开销、确保操作的原子性。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-11 13:13:56 1200

原创 Redis学习笔记12:基于springboot的redis客户端执行lua脚本

Redis客户端允许通过eval指令直接将lua脚本发送到服务器端执行,服务器会阻塞其它指令的执行,确保脚本的原子性;一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-11 09:16:35 1255

原创 Redis学习笔记11:基于spring的Lettuce redis客户端普通指令、RedisCallback、SessionCallback建立连接数

一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-11 09:15:35 450

原创 Redis学习笔记10:基于spring的Lettuce redis客户端Pipelining管道

Redis提供了对pipelining管道的支持,这包括在不等待回复的情况下向服务器发送多个命令,然后在一个步骤中读取回复。当需要连续发送多个命令时,管道化可以提高性能,例如:将许多元素添加到同一列表中。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-11 09:14:31 479

原创 Redis学习笔记9:基于spring的Lettuce redis客户端连接器LettuceConnectionFactory配置

Lettuce是一个基于Netty的开源连接器,由Spring Data Redis通过org.springframework.data.redis.connection.lettuce包提供支持。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-11 09:13:39 813

原创 Redis学习笔记8:基于springboot的Lettuce redis客户端connectTimeout、timeout、shutdownTimeout

一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-11-11 09:12:15 1202

原创 Redis学习笔记7:基于springboot的Lettuce redis客户端keepAlive保活机制

lettuce断线重连监视器ConnectionWatchdog#scheduleReconnect方法中的延迟重连时间是根据io.lettuce.core.resource.Delay策略来决定,默认是采用ExponentialDelay延迟策略,即2的幂次方,即时间是PT0.001S、PT0.002S、PT0.004S一直到最大PT30S。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK。

2023-11-11 09:11:01 697

原创 Redis学习笔记6:基于springboot的Lettuce redis客户端ConnectionWatchdog断线重连时间ExponentialDelay延迟策略

lettuce断线重连监视器ConnectionWatchdog#scheduleReconnect方法中的延迟重连时间是根据io.lettuce.core.resource.Delay策略来决定,默认是采用ExponentialDelay延迟策略,即2的幂次方,即时间是PT0.001S、PT0.002S、PT0.004S一直到最大PT30S。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK。

2023-10-28 09:21:14 660

原创 Redis学习笔记5:基于springboot的lettuce redis客户端断线重连ConnectionWatchdog

lettuce默认采用共享本地连接的模式和redis服务器端交互,如果连接断开如何及时发现并且重新建立连接呢?通过翻阅源码发现有两种方案,方案一:开启连接有效性检测;方案二:通过ConnectionWatchdog监视器一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-10-28 09:19:12 1440

原创 Redis学习笔记4:基于springboot的lettuce redis客户端LettuceConnectionFactory连接工厂LettuceConnectionProvider实现

LettuceConnectionFactory连接工厂在建立本地连接的时候会通过LettuceConnectionProvider的具体实现建立真实的本地连接,LettuceConnectionProvider在连接工厂中起到的作用就是连接提供者的角色,具体建立连接是会调用对应的getConnection方法。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-10-28 09:17:23 1108

原创 Redis学习笔记3:基于springboot的lettuce redis客户端validateConnection连接有效性检查

LettuceConnectionFactory连接工厂默认对redis操作时不会对本地共享连接进行有效性检测,不进行有效性检测可以 提升应用程序的性能,但是也会带来一定的连接无效性的风险,LettuceConnectionFactory提供了一个validateConnection属性,默认值是false,可以在我们对性能要求不是很高的场景下对redis操作之前进行有效性检查,如果无效则重新建立连接。

2023-10-28 09:15:33 709

原创 Redis学习笔记2:基于springboot的lettuce redis客户端eagerInitialization提前初始化连接

LettuceConnectionFactory连接工厂类默认是不会提前初始化本地物理连接的,也就是懒加载模式,只有等到客户端的RedisTemplate等具体要操作Redis时才会去建立连接。一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

2023-10-28 09:13:53 331

原创 Redis学习笔记1:基于springboot的lettuce redis客户端共享原生物理连接shareNativeConnection

springboot默认是使用基于lettuce的redis客户端,默认情况下LettuceConnectionFactory的shareNativeConnection属性值为true;

2023-10-28 09:12:22 457

原创 springboot RabbitMQ客户端连接故障恢复

最近做RabbitMQ故障演练发现RabbitMQ服务器停止后,基于springboot的消费端不可以自动的恢复,队列的消费者消失,消息一直积压到队列中,这种情况肯定是不可接收的;通过研究源代码找到了解决方案。

2023-08-26 00:30:00 2565

原创 TransmittableThreadLocal线程池中线程复用问题解决

对于TL、ITL、TTL网上有很多的介绍,对于源码的分析都很全,大家可以参考;

2023-08-12 16:12:54 826

原创 javadoc注解及maven-javadoc-plugin插件

将failOnError参数设置为false,即在生成文档时出现错误时不会停止构建过程。@since: 标识此更改或功能子指定的版本、时间开始存在。@see:用于指定参考的内容,一般会带有链接或文本条目。@throws:抛出的异常,和exception同义。@deprecated:不推荐使用的方法。@version:版本-类、接口级别。@author:作者-类、接口级别。@param:方法、构造函数的参数。@exception:抛出的异常。@return:方法的返回类型。

2023-07-27 23:30:00 1523

原创 解锁新技能《logback标记日志过滤器MarkerFilter》

*** 全局标记过滤器,接受指定标记的日志记录到文件中* @param context 上下文* @param marker marker标识* @return 标记过滤器,将会接受被标记的日志记录到文件中//过滤器名称 filter . setName(StrUtils . join("AcceptMarkerFilter-" , marker));//上下文 filter . setContext(context);

2023-07-22 09:11:10 814

原创 解锁新技能《基于logback的纯java版本SDK实现》

/</</</</</</</在项目开发过程中通常会使用logback作为日志记录的依赖工具,使用方式是引入logback相关jar包,然后配置logback.xml配置文件的方式来实现;xml的配置方案如果是一个两个项目还好,那如果是几十个项目呢?每个项目都要写一遍配置文件也是一键很繁琐的事情,而且配置文件还容易出错,那我们有没有办法将其改造成一个纯java版本的SDK组件呢?如果我们需要用的时候只需要将其依赖引入项目中开箱即用是不是很方便。

2023-07-22 09:09:08 501

原创 解锁新技能《logback packagingData属性配置作用及源码分析》

开源SDK:

2023-07-22 09:07:02 550

原创 解锁新技能《spring如何将属性配置文件中的属性绑定到实体类中》

*** 前缀} }

2023-07-15 14:37:06 1018

原创 解锁新技能《springboot基于ResponseBodyAdvice的AOP切面返回值包装》

在项目开发过程中我们会对返回值进行统一的包装处理,对最外层加上status、message、data、spentTime等统一个是的包装;当前SDK支持两种方案,一种基于适配器模式实现,一种基于AOP切面实现,本文只对AOP模式讲解,适配器方案参考源码;

2023-07-05 23:45:00 511

原创 解锁新技能《springboot基于表单multipart/form-data的文件上传》

springboot的文件上传有多种实现方案,个人比较推荐方案三通过实体类属性绑定的方式,这样可以方便文件及其关联的相关属性字段;开源依赖pom</</</</

2023-07-05 23:45:00 989

原创 解锁新技能《springboot全局异常处理@ExceptionHandler如何获取控制器方法上的注解》

springboot全局异常处理通常都是用@RestControllerAdvice标注异常处理类,使用@ExceptionHandler标注在捕获具体异常的方法上,我们可以通过异常参数获取异常信息,那如果我想获取抛出异常的具体控制器及其上面标注的注解如何获取呢?

2023-07-05 23:45:00 1094

原创 解锁新技能《AnnotationConfigApplicationContext@7a8414ea has been closed already》

}

2023-06-26 19:08:41 710

原创 Druid数据库配置密码加密openssl生成和代码生成两种方案

【代码】Druid数据库配置openssl生成秘钥并加密密码。

2023-05-26 21:00:00 1104

原创 解锁新技能《Java日期转换比较计算SDK》

开源pom依赖引用:</</</</

2023-05-19 20:30:00 172

原创 解锁新技能《RSA获取私钥报java.security.InvalidKeyException: IOException : algid parse error, not a sequence》

开源依赖pom引用:

2023-05-17 19:00:00 596

原创 解锁新技能《如何使用JWT创建解析令牌,使用RSA非对称加密》

开源依赖pom引用地址

2023-05-17 19:00:00 453

原创 解锁新技能《Java绘制2D图形验证码方法》

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zceB9ho0-1683183671356)(/Users/yaomingyang/Library/Application Support/typora-user-images/image-20230504144214030.png)]答案:(height - (fm.getAscent() + fm.getDescent())) / 2 + fm.getAscent();问题一:绘制验证码的(x,y)坐标相对的点是哪里?

2023-05-04 15:02:42 699

原创 解锁新技能《Spring Plugin插件系统》

平时工作过程中很少使用Spring Plugin插件,最近因为在学习springfox源码的过程中发现有大量用到,先来学习下插件的使用方法。截止20230426日,GitHub的Star为403,fork数为107.官方说Spring Plugin是世界上最小规模的插件系统,果然名不虚产,用户数够小。Spring Plugin通过提供扩展核心系统功能的插件实现核心的灵活性,可以满足我们对模块化可扩展程序的需要。

2023-04-26 19:33:17 1198

eclipse-class-decompiler-update_v2.10.0.zip

该反编译工具支持spring tool suite 在mac上反编译class文件,

2017-09-30

struts2.3.4

标准的struts2.3.4APIchm文档,该文档是中文版

2013-06-21

JDK_API_1.6英文版

全面的java开发必备的英文版API文档

2013-03-07

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

TA关注的人

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