- 博客(52)
- 收藏
- 关注
原创 分布式事务组件Seata的TCC常见问题及解决方案
如上图所示,全局事务开启后,参与者 A 分支注册完成之后会执行参与者一阶段 RPC 方法,如果此时参与者 A 所在的机器发生宕机,网络异常,都会造成 RPC 调用失败,即参与者 A 一阶段方法未成功执行,但是此时全局事务已经开启,Seata 必须要推进到终态,在全局事务回滚时会调用参与者 A 的 Cancel 方法,从而造成空回滚。如上图所示,参与者 A 执行完二阶段之后,由于网络抖动或者宕机问题,会造成 TC 收不到参与者 A 执行二阶段的返回结果,TC 会重复发起调用,直到二阶段执行结果成功。
2024-02-07 15:10:33 922
原创 EasyExcel导出数据,解决慢sql,漏数据,重复数据问题(一)
这里解决了我们开头提到的所有问题。下节我们一起来分析下…大家思考一下,在导出excel时是否会出现如下几个常见问题。那到底该如何解决呢?下面我们一起来看看我的实现吧!
2024-02-05 15:28:52 420
原创 CompletableFuture的thenCombine结果组合用法实例
thenCombine 用法,是将任务用多线程分组执行再组合。在项目实战中应用场景还是比较多的。项目实例写得还不够优雅,还有优化空间。
2024-01-17 18:33:46 433
原创 mysql中DATE_FORMAT() 函数详解
其中,date 参数是要被格式化的日期/时间值,format 参数是指定的日期/时间格式,可以是一个字符串常量或者包含日期格式控制符的字符串。在 MySQL 中,DATE_FORMAT() 函数用于将日期/时间类型的值按照指定的格式进行格式化输出。该SQL语句将根据指定的订单状态和年月份分组,统计每个组中的订单数量,并按照月份降序进行排列。这个查询可以用于分析指定订单状态在不同月份的变化趋势或统计特定订单状态的总数。此语句会返回一个包含年份和月份的字符串,例如 ‘2022-12’。
2024-01-15 11:09:16 739
原创 MVCC详解
MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作。其他两个隔离级别够和MVCC不兼容, 因为 READ UNCOMMITTED 总是读取最新的数据行, 而不是符合当前事务版本的数据。多版本并发控制:读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了,不同的事务session会看到自己特定版本的数据,版本链.而 SERIALIZABLE 则会对所有读取的行都加锁。这三个东西实现的,因而这三玩意儿也被称为“MVCC三剑客”!
2024-01-11 02:27:31 976
原创 AQS之ReentrantReadWriteLock
ReentrantReadWriteLock适合读多写少的场景。是可重入的读写锁实现类。其中, 写锁是独占的,读锁是共享的。支持锁降级(持有写锁、获取读锁,最后释放写锁的过程)锁降级可以帮助我们拿到当前线程修改后的结果而不被其他线程所破坏,防止更新丢失。可以保证数据的可见性,如果当前线程不获取读锁而是直接释放写锁,假设此刻另一个线程(记作线程T)获取了写锁并修改了数据,那么当前线程无法感知线程T的数据更新。
2023-12-28 01:14:26 398 1
原创 AQS之共享锁Semaphorer&CountDownLatch
Semaphore,俗称信号量,它也是基于AbstractQueuedSynchronizer实现的。例如: 大小为n的信号量可以实现限流的功能,它可以实现只能有n个线程同时获取信号量。CountDownLatch(闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化。
2023-12-24 23:45:51 160
原创 Redis延迟队列原理及实例
在Redis延迟队列中,我们使用有序集合(Sorted Set)来存储消息,其中,消息的到期时间作为有序集合的分数,消息内容作为有序集合的成员。支持多种操作:除了基本的添加、删除和范围查询,Sorted Set还支持其他一些有用的操作,如获取成员的分数、修改成员的分数、按照分数范围删除成员等。在这个命令中,delay_queue是有序集合的名称,1640390400是消息的到期时间(即2023年12月25日的时间戳),"message content"是消息的内容。其中就包括了延迟队列的实现。
2023-12-22 12:05:46 1177
原创 Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数?
奇数个master节点可以在满足选举该条件的基础上节省一个节点。例如三个master节点和四个master节点的集群相比。的集群master节点同意才能选举成功,如果只有两个master节点,当其中一个挂了,是达不到选举新master的条件的。master的选举需要。所以奇数的master节点更多的是从。
2023-12-16 21:34:42 463
原创 Redis过期淘汰策略
如果删除的是字符串类型的 key,但是key对应value比较大,比如有几百M,那么也是会 阻塞Redis的。这种bigkey是我们要尽量减少出现的情况。LFU 算法(Least Frequently Used,最不经常使用):淘汰最近一段时间被访问次数最少的 数据,以次数作为参考。LRU 算法(Least Recently Used,最近最少使用):淘汰很久没被访问过的数据,以最近一 次访问时间作为参考。绝大多数情况我们都可以用LRU策略,当存在大量的热点缓存数据时,LFU可能更好点。
2023-12-14 23:44:43 475
原创 Netty高性能的原因
不会因为每个连接都需要一个单独的线程而耗尽资源(BIO),能使用少量的线程来处理大量连接,避免了线程切换和上下文切换的开销,从而提高了系统的并发处理能力。Netty提供了可定制的线程模型,可以根据不同的业务需求选择合适的线程模型,例如单线程模型、多线程模型或者主从线程模型,以适应不同的场景和环境,从而提高了系统的灵活性和性能表现。Netty支持零拷贝技术,通过直接在操作系统内核空间与用户空间之间传输数据,避免了不必要的数据拷贝,减少了CPU和内存的开销,提高了数据传输效率。
2023-12-12 09:58:46 427
原创 Redis的过期策略有哪些?
定期过期:每隔⼀定的时间,会扫描⼀定数量的数据库的expires字典中⼀定数量的key,并清除其中已过期的key。(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。定时过期:每个设置过期时间的key都需要创建⼀个定时器,到过期时间就会⽴即清除。该策略可以⽴即清除过期的数据,对内存很友好;但是会占⽤⼤量的CPU资源去处理过期的数据,从⽽影响缓存的响应时间和吞吐量。
2023-12-12 08:30:00 489
原创 Netty多路复用机制select、poll 和 epoll的区别
epoll 是 Linux 2.6 内核中引入的新的 IO 多路复用机制,它使用了红黑树来存储待检测的 IO 事件,同时还可以通过 epoll_ctl() 函数动态地增加或删除事件。poll 是在 select 基础上进行的改进,它使用链表来存储待检测的 IO 事件,避免了 bit mask 的限制,同时也避免了 select 的缺点。在 Java NIO 中,由于 Selector 的实现依赖于底层的 IO 多路复用机制,因此我们需要了解这些机制的特点和性能表现,以便进行正确的选择。
2023-12-08 11:43:11 419
原创 java解决CORS跨域问题【总结】
*** 跨域过滤器* @return/** 允许任何域名使用 */ // corsConfiguration.addAllowedOrigin("*");/** 允许的请求头 */ corsConfiguration . addAllowedHeader("*");/** 允许的方法 */ corsConfiguration . addAllowedMethod("*");} }/*** 跨域过滤器* @return。
2023-12-01 20:24:02 1147
原创 Docker常用命令
其中f0b1c8ab3633是容器 ID, 当然也可使用 docker stop容器名称来停止指定容器。这样就能启动一个 Nginx容器。如需列出所有容器(包括已停止的容器),可使用-a参数。该列表包含了7列,含义如下。-p 宿主机端口:容器端口 #开放容器端口到宿主机端口。
2023-11-27 18:22:07 955
原创 JdbcTemplate的多数据源配置
完成多数据源的配置信息之后,就来创建个配置类来加载这些配置信息,初始化数据源,以及初始化每个数据源要用的JdbcTemplate。你只需要在你的Spring Boot应用下添加下面的这个配置类即可完成!
2023-11-25 14:55:57 666
原创 什么是MYSQL死锁?如何避免死锁?
MySQL中的死锁是指两个或多个事务相互等待对方持有的锁而无法继续执行的情况,导致事务永远无法执行,卡死状态。解决死锁的核心思路就是打破事务之间循环等待的条件。
2023-11-25 13:17:24 407
原创 什么是BASE理论?
BASE 理论是由 eBay 架构师提出,BASE 理论是对 CAP 理论的延伸,是一种分布式系统设计的理论,它的核心思想是放弃强一致性(CAP的一致性,指的是强一致性),追求最终一致性。BASE 理论三要素是基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)。
2023-11-25 11:57:05 419
原创 如何优化 Elasticsearch 查询性能
优化 Elasticsearch 查询性能需要从多个方面入手。通过合理的索引设计、优化查询语句、优化硬件资源和集群架构等方面的优化,可以显著提高 Elasticsearch 的查询性能。
2023-11-25 11:28:00 801
原创 java elasticsearch 桶聚合(bucket)
Elasticsearch指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍Java Elasticsearch指标聚合的写法。
2023-11-25 10:53:19 650
原创 Java Elasticsearch 指标聚合
Elasticsearch指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍Java Elasticsearch指标聚合的写法。其他指标聚合的用法类似,后面分别介绍常用指标聚合。
2023-11-25 10:29:21 548
原创 Elasticsearch 聚合查询(Aggregation)详解
Elasticsearch中的聚合查询,类似SQL的SUM/AVG/COUNT/GROUP BY分组查询,主要用于统计分析场景。
2023-11-25 09:49:14 994
原创 jsoup登录日志平台后调企业微信机器人自动发送错误日志告警
1.jsoup实现登录,获取到cookie和token等用户鉴权信息。3.调用日志平台错误日志Top榜接口,查询到结果集。下面是用错误日志Top10告警发送。4.调用企业微信机器人发送消息接口。2.获取接口相应的key值。
2023-11-24 17:09:45 612
原创 mysql连接函数CONCAT和CONCAT_WS
可以有很多个参数,如果参数有一个是NULL,则结果返回NULL(使用CONCAT()函数对包含NULL的数据进行拼接时,结果为NULL,所以在对数据进行拼接之前,应该先检查要拼接的字段是否存在NULL)将多个字段拼接为一个字段 (字符串 str1,str2 等多个字符串合并为一个字符串,多个字符串之间用逗号分隔)格式:SELECT CONCAT_WS(‘拼接符’,str1,str2,...) FROM [表名];同CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上拼接符。
2023-10-27 14:39:08 86
原创 mysql对新增字段初始化时报Unsafe query: ‘Update‘ statement without ‘where‘ updates all table rows at once
需求:t_right_info_goods表新增了goods_original_price字段,要将 t_new_goods_info 表的 goods_face_price 字段同步到新增字段 goods_original_price 中去。:这里必须要挂条件 where 1 = 1, 否则会报 Unsafe query: ‘Update’ statement without ‘where’ updates all table rows at once,所以,一定要带有where条件约束。
2023-10-25 10:36:17 230
原创 mysql分组取每组内所有数据GROUP_CONCAT
我们可以使用GROUP BY语句对数据进行分组。这条语句将返回一个结果集,其中包含了按照"category"字段分组后的唯一值。
2023-10-24 09:53:06 990
原创 mysql中union和union all的区别
2、union all: 对两个结果集进行并集操作,2、union all: 不会对获取的结果进行排序操作。,相当于distinct, 同时进行默认规则的排序;, 即所有的结果全部显示, 不管是不是重复;1、union: 会对获取的结果进行排序操作。1、union: 对两个结果集进行。二、区别2:获取结果后的操作。union all 查询。一、区别1:取结果集。
2023-10-19 11:41:06 76
原创 jemeter压测
我们一般注意90%的情况下接口的响应时间会在多少,控制在一个差不多的范围,然后看看qps(吞吐量)最高能达到多少。原始Jmeter没有插件功能,所以需要先安装依赖jar包,然后重启才能看到插件选项。如果你想在cmd命令框快速打开jmeter还需要配置环境变量,以后打开就方便了。重启重启JMeter,打开后新建取样器,能看见websocket的选项就成功了。下载后按照提示,放到对应目录lib/ext,然后重启项目。这样就可以压测了,然后再http请求下添加一个聚合报告。发送文本或二进制WebSocket帧。
2023-10-18 15:51:45 23
原创 java正则表达式提取字符串中指定的数据
正则表达式是一种用来描述、匹配和操作字符串的强大工具。它可以用于验证输入的字符串、提取特定格式的字符串、替换字符串中的特定部分等操作。String 类里也提供了如下几个特殊的方法。//判断该字符串是否匹配指定的正则表达式。//将该字符串中所有匹配 regex 的子串替换成replacement。//将该字符串中第一个匹配 regex 的子串替换成 replacement。//以 regex 作为分隔符,把该字符串分割成多个子串。我是一个好人a543,qq号是103456789";
2023-10-12 10:49:58 2026
原创 CountDownLatch的骚操作
以田径运动跑步为例,起跑前所有运动员等待裁判发枪声为准开始比赛、终点处计时裁判则需要等待所有运动员到达终点中宣布本轮次比赛结束,典型的多个线程等待一个线程、一个线程等待多个线程的场景,java.util.concurent包下的CountDownLatch就非常适合实现这种场景。4、CountDownLatch调用countDown()方法计数减一,调用await()方法只进行阻塞,对计数没任何影响,CyclicBarrer调用await()方法计数加1,若加1后的值不等于构造方法的值,则线程阻塞。
2023-10-11 14:15:23 45
原创 XML 文件中的 CDATA 的使用.
W3C 网站说是不让 xml 解析器来解析他。只是就使用细节,具体如何使用,以及为什么要这样使用没进行说明.这里如果不实用转义的话,XML 解析器会把 > 作为标签去解析它.你可以理解为字符串定义的反斜杠 '\'之前也了解过,但一直没去细究.
2023-10-10 09:43:01 133
原创 通过正则给手机号|身份证|护照脱敏
replaceAll 将指定字符位置字符替换成*实现脱敏。需要写好相应的正则表达式。抛砖引玉,希望兄弟们在替换其他字符的时候可以借鉴参考使用;手机号|身份证|护照进行脱敏操作。
2023-10-09 17:20:16 130
原创 建议使用LocalDateTime而不是Date
通过阅读本篇文章你将了解到:如果不格式化,打印出的日期可读性差Tue Sep 10 09:34:04 CST 2019 使用对时间进行格式化,但是线程不安全的的方法最终调用代码:是共享变量,并且这个共享变量没有做线程安全控制。当多个线程同时使用相同的对象【如用修饰的】调用方法时,多个线程会同时调用方法,可能一个线程刚设置好值另外的一个线程马上把设置的值给修改了导致返回的格式化时间可能是错误的。在多并发情况下使用需格外注意除了是线程不安全以外,方法也是线程不安全的。方法实际调用方法来解析,方法里主要
2023-10-09 16:37:09 25
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人