- 博客(198)
- 收藏
- 关注
原创 mysql的锁-->一篇读懂所有锁机制
全局锁表级锁:表锁 意向锁 元数据锁 AUTO-INC锁行级锁:记录锁,间隙锁,next-key锁(记录锁加间隙锁)意向锁和行锁是息息相关的,我们在对行数据进行加锁时,会先产生一个表级别的意向锁,共享读行锁产生意向共享锁,排斥写行锁产生意向排斥锁。意向锁之间也不会发生冲突意向共享锁读可以兼容共享读表锁,与排斥写表锁不兼容(读读锁共享)意向排斥写锁与共享读表锁不兼容,与排斥写表锁不兼容(写读锁不共享,写写锁不共享)
2025-03-10 22:52:31
811
原创 分布式日志和责任链路
GrayLog是一个轻量型的分布式日志管理平台,一个开源的日志聚合、分析、审计、展示和预警工具。在功能上来说,和 ELK类似,但又比 ELK要简单轻量许多。依靠着更加简洁,高效,部署使用简单的优势很快受到许多公司的青睐。其基本框架如图:基本思路就是每一个微服务把自己的日志发送给GrayLog然后将日志数据存入mongoDB或者es中,最后提供一个浏览器进行操作微服务中的GrayLog客户端发送日志到GrayLog服务端GrayLog把日志信息格式化,存储到Elasticsearch。
2025-03-02 22:18:42
802
原创 物流信息的二级缓存
由上图可以看出,在用户的一次请求中,可以设置多个缓存以提升查询的性能,能够快速响应。浏览器的本地缓存使用Nginx作为反向代理的架构时,可以启用Nginx的本地缓存,对于代理数据进行缓存如果Nginx的本地缓存未命中,可以在Nginx中编写Lua脚本从Redis中命中数据如果Redis依然没有命中的话,请求就会进入到Tomcat,也就是执行我们写的程序,在程序中可以设置进程级的缓存,如果命中直接返回即可。如果进程级的缓存依然没有命中的话,请求才会进入到持久层查询数据。
2025-02-28 22:50:49
959
原创 hutool工具类的DateUtil和LocalDateTimeUtil
这里可以直接使用DateUtil工具类的parse方法解析这个日期字符串对象,我们进入源码查看,可以发现可以解析四种类型的数据。:推荐在需要精确日期时间操作、格式化或需要与 Java 8 及以上版本的新日期时间 API 集成的场景中使用。同时包含日期和时间信息,但功能较为有限,且存在一些设计上的缺陷(如月份从 0 开始)。它是不可变的、线程安全的,并且专注于本地日期和时间(不包含时区信息)。包中的一个类,属于新的日期时间 API(JSR-310)。是 MySQL 中用于存储日期和时间的字段类型,格式为。
2025-02-25 21:53:39
1195
原创 MongoDB
MongoDB是一个基于分布式文件存储的数据库由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2025-02-21 11:32:16
815
原创 id生成系统和mp条件简化
Leaf 取号段的时机是在号段消耗完的时候进行的,也就意味着号段临界点的ID下发时间取决于下一次从DB取回号段的时间,并且在这期间进来的请求也会因为DB号段没有取回来,导致线程阻塞。如果请求DB的网络和DB的性能稳定,这种情况对系统的影响是不大的,但是假如取DB的时候网络发生抖动,或者DB发生慢查询就会导致整个系统的响应时间变慢。现在我们的业务需要生成特定格式的id,如生成一个运单id,需要加HL(前缀)+13个数字 ,显然雪花算法生成的19为数字id是不符合的,所以我们使用美团leaf。
2025-02-18 19:02:33
929
原创 JSONObject,TreeUtil,EagelMap,BeanUtil使用
在将transportLine的成员变量的值拷贝给transportLineDate数据时,不会把transportLine值为空的成员变量进行拷贝,也不会把值覆盖到transportLineDate原来的type,startOrganId,startOrganName,endOrganId,endOrganName。获取数组类型的值,使用getJSONArray()方法,然后获取下标为0的值,并且强转为JSONObject类型。获取boolean类型的值,使用getBool()方法。
2025-02-15 15:11:39
926
原创 封装neo4j的持久层和服务层
这里指定泛型为AgencyEntity类,和id属性为Long类AgencyEntity类是与neo4j中AGENCY标签一一对应的实体类通过实现getAgencyType()抽象方法来区别不同的机构实体类/*** 网点数据操作*/@Data@Override@Data@Id@ApiModelProperty(value = "父节点id", required = true)@ApiModelProperty(value = "业务id", required = true)
2025-02-14 18:59:22
1215
原创 Spring Data Neo4j使用
我们现在可以发现基础已经提供好的curd很少,我们也可以自定义一些简单一些的操作。JPA自定义方法规则只要我们在接口中所写的方法名字与下表中的格式一致,neo4j也会自动帮我们生成cql语句KeywordSampleAfterBeforeInBetweenEndingWithExistsTrueFalseIsNotNullNullLessThanLikeNotLikeNearRegexAndOr。
2025-02-13 10:36:01
1140
1
原创 Neo4j入门
Neo4j是用Java实现的开源NoSQL图数据库。从2003年开始开发,2007年正式发布第一版,其源码托管于GitHtb。Neo4j作为图数据库中的代表产品,已经在众多的行业项目中进行了应用,如:网络管理、软件分析、组织和项目管理、社交项目等方面。Neo4j实现了专业数据库级别的图数据模型的存储,提供了完整的数据库特性,包括ACID事务的支持、集群的支持、备份和故障转移等。
2025-02-12 10:12:13
1042
原创 xxl-job的分片广播
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
2025-02-09 14:24:53
1037
原创 工厂模式+枚举类的json序列化+redisson的使用
我们如何写这个程序呢,一般的方法肯定就是使用(if-else if)的方式进行判断使用哪一种应用进行学些,这是一种很简单的方式,但是如果我们又添加了几种学习方式呢,如大学搜题酱等,我们又得在原有代码上进行添加(else if)操作,这样就显得十分麻烦,且需要频繁的去修改原有的代码。redisson加的锁的value是一个hash结构,大key是我们自己定义的,用来区别不同的锁,而小key是生成的客户端uuid+线程id,value值就是加锁的次数。最后就可以返回具体的学习方式进行的学习操作的处理器。
2025-02-07 21:41:37
1011
原创 实现支付宝easy-sdk和微信支付功能以及异步通知
2、后台通知交互时,如果微信收到商户的应答不符合规范或超时,微信会判定本次通知失败,重新发送通知,直到成功为止(在通知一直不成功的情况下,微信总共会发起多次通知,通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m)这里通知发送可能会多台服务器进行发送,且发送时间可能会在几秒内,但微信不保证通知最终一定能成功。body 异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
2025-02-05 13:48:14
1309
原创 使用支付宝通用sdk在沙箱环境下完成支付交易
为什么不可逆:因为不同数的哈希值可能相同,导致哈希冲突,所以哈希值不可逆(如,3和9的模三都是0),因此使用哈希算法加密后的数据只能通过匹配的方法来判断数据是否相同。,Hutool是一个Java工具包类库,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类。这种加密算法通常用于数据库中存放的支付密码数据,对支付密码数据进行不可逆加密,这样一来及时数据库泄露,支付密码数据也不会被解密出来。例如,在 HTTPS 中,服务器的公钥用于加密客户端生成的对称密钥。
2025-02-04 18:37:19
1356
原创 运费微服务和redis存热点数据
存入value值时使用json序列@Configuration//告诉Spring这是一个配置类,并让Spring加载这个类@Bean//默认的key序列化器为:JdkSerializationRedisSerializer//我们改成StringRedisSerializer//键序列化//值序列化// 创建一个json的序列化方式// 设置value用jackjson进行处理//key hashMap序列化//value hashMap序列化//连接工厂。
2024-12-04 22:15:32
1064
原创 项目二技巧二-->代码规范,异常处理器
项目中,我们统一做了自定义异常的处理。用于微服务之前接口调用抛出的异常用于前后端交互时抛出的异常SLException的定义:SLWebException的定义:这两个异常的区别在于code、status的值不同。疑问:为什么不使用一个,而是要设置两个?这个主要是前端和后端的设计不同,一般在微服务间接口调用时会采用标准的RESTful方式,按照RESTful的规范响应的状态码要使用标准的http状态码,成功->200,失败->500,没有权限->401等。
2024-12-02 17:12:57
895
原创 项目二技巧一
Maven 私服(也称为 Maven 仓库管理器)是一个本地的 Maven 仓库,用于存储和管理 Maven 项目依赖的远程仓库中的项目。这样一来在主机访问git.sl-express.com域名时,就会访问192.168.150.101这个虚拟机的ip,nginx就会根据nginx.conf配置文件的内容反向代理到虚拟机本地的。一般根据请求路径的不同来转发到不同的微服务是由gateway网关来实现的,所以我们去gateway网关的application.yml文件中查看路径断言规则。
2024-11-30 22:30:02
910
原创 Redis高级
因为是记录命令,AOF文件会比RDB文件大的多。因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。但是,如果slave出现网络阻塞,导致master的offset远远超过了slave的offset,并且完全覆盖了slaveof的offset。master判断发现slave发送来的replid与自己的不一致,说明这是一个全新的slave,就知道要做全量同步了。
2024-11-21 22:51:34
1385
原创 seata的原理解读-->四个模式
*事务协调者:**维护全局和分支事务的状态,协调全局事务提交或回滚。**事务管理器:**定义全局事务的范围、开始全局事务、提交或回滚全局事务。**资源管理器:**管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。无论哪种方案,都离不开TC,也就是事务的协调者。
2024-11-18 21:11:05
1191
原创 分布式事务seata基于docker安装和项目集成seata
分布式系统节点通过网络连接,一定会出现分区问题(P)当分区出现时,系统的一致性和可用性就无法同时满足cp-->不同节点的角色不同ap-->不同节点的角色相同。
2024-11-16 22:28:36
1356
原创 MQ集群
在消息的消费过程中可能因为网络的问题卡顿,让mq认为没有把消息消费成功然后又重复消费,导致一个消息被消费两次,这就是消息的幂等性。用户发送给队列的一切请求,例如发送消息、消息回执默认都会在主节点完成,如果是从节点接收到请求,也会路由到主节点去完成。但是,不同队列可以在集群中的任意节点上创建,因此不同队列的主节点可以不同。:是一种主从集群,普通集群的基础上,添加了主从备份功能,提高集群的数据可用性。:是一种分布式集群,将队列分散到集群的各个节点,从而提高整个集群的并发能力。可以看到,仲裁队列的 + 2字样。
2024-11-14 21:52:47
1328
原创 死信交换机,延迟队列和惰性队列
什么是死信?消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false消息是一个过期消息,超时无人消费要投递的队列消息满了,无法投递如果这个包含死信的队列配置了属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为死信交换机(Dead Letter Exchange,检查DLX)。
2024-11-12 21:57:54
1143
原创 消息队列高级
Slf4j@Override//获取rabbitTemplate//设置发送者确认回调方法/*** @param correlationData 自定义的消息* @param ack ack确认,true为发送到交换机成功* @param s 失败原因*/@Overrideif(ack){log.info("消息到达交换机");}else {log.error("消息没有到交换机,原因为:{}",s);});@Test。
2024-11-11 21:37:49
714
原创 线程隔离和熔断降级并配置对应的服务降级
在application.yml中配置:feign.sentienl.enable=true给FeignClient编写FallbackFactory并注册为Bean将FallbackFactory配置到FeignClient线程隔离的两种手段是?信号量隔离线程池隔离信号量隔离的特点是?基于计数器模式,简单,开销小线程池隔离的特点是?基于线程池模式,有额外开销,但隔离控制更强。
2024-11-08 21:38:02
884
原创 Sentinel通过限流对微服务进行保护
JMeter是由Apache组织开发的一款基于Java的压力测试工具。它最初设计用于Web应用测试,但随着时间的推移,JMeter的功能已经扩展到了其他的测试领域。JMeter能够模拟大量用户对服务器、网络或对象进行负载测试,从而测试它们在不同压力下的性能,并进行整体性能分析。
2024-11-04 22:43:47
1039
原创 实现mysql和es的数据同步以及es的集群
方式一:同步调用优点:实现简单,粗暴缺点:业务耦合度高方式二:异步通知优点:低耦合,实现难度一般缺点:依赖mq的可靠性方式三:监听binlog优点:完全解除服务间耦合缺点:开启binlog增加数据库负担、实现复杂度高。
2024-10-27 21:58:11
1197
原创 es实现自动补全
我们发现默认的拼音分词器只是把每个汉字的拼音给分词出来,而我们希望的是每个词条形成一组拼音,所以我们需要对拼音分词器做个性化定制,形成自定义分词器。character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符tokenizer:将文本按照一定的规则切割成词条(term)。如果文本是keyword,就进行不分词;tokenizer filter:将tokenizer输出的词条做进一步处理(对分词分出来的词条后进行下一步处理)。例如大小写转换、同义词处理、
2024-10-26 22:05:29
1101
原创 RestHighLevelClient操作es查询文档
② 传入Request.source() 的 query() 方法。第三步,利用client.search()发送请求,得到响应。构建DSL,DSL中可以包含查询、分页、排序、高亮等。准备Request.source(),也就是DSL。解析结果(参考JSON结果,从外到内,逐层解析)① QueryBuilders来构建查询条件。创建SearchRequest对象。
2024-10-21 22:19:05
1326
原创 es的DSL查询语句
match和multi_match的区别是什么?match:根据一个字段查询multi_match:根据多个字段查询,参与查询字段越多,查询性能越差常见的精确查询有哪些?term查询:根据词条进行精确查询,一般搜索keyword类型,数据类型,布尔类型,日期类型字段range查询:根据数值范围查询,可以是数值,日期类型字段的查询query:查询条件from和size:分页条件sort:排序条件highlight:高亮条件。
2024-10-20 21:00:19
1323
原创 es索引库操作和使用RestHignLevelClient客户端操作es
索引库操作有哪些?创建索引库:PUT /索引库名查询索引库:GET /索引库名删除索引库:DELETE /索引库名添加字段:PUT /索引库名/_mapping文档操作有哪些?创建文档:POST /{索引库名}/_doc/文档id { json文档 }查询文档:GET /{索引库名}/_doc/文档id删除文档:DELETE /{索引库名}/_doc/文档id修改文档:全量修改:PUT /{索引库名}/_doc/文档id { json文档 }
2024-10-17 22:25:19
1658
原创 docker安装elasticsearch和ik分词器
什么是elasticsearch?一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能什么是elastic stack(ELK)?是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch什么是Lucene?是Apache的开源搜索引擎类库,提供了搜索引擎的核心API创建倒排索引时对文档进行分词用户搜索时,对输入的内容进行分词。
2024-10-16 22:24:23
2087
原创 Gateway
网关搭建步骤:创建项目,引入nacos服务发现和gateway依赖配置application.yml,包括服务基本信息、nacos地址、路由路由配置包括:路由id:路由的唯一标示路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡路由断言(predicates):判断路由的规则,路由过滤器(filters):对请求或响应做处理过滤器的作用是什么?① 对路由的请求或响应做加工处理,比如添加请求头② 配置在路由下的过滤器只对当前路由的请求生效。
2024-10-14 20:41:27
1403
原创 Feign
使用Feign的步骤:① 引入依赖② 添加@EnableFeignClients注解③ 编写FeignClient接口④ 使用FeignClient中定义的方法代替RestTemplate类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制。
2024-10-13 16:02:44
1206
原创 Nacos配置管理和Nacos集群配置
1.在nacos中添加配置文件2.在微服务中引入nacos的config依赖3.在微服务中添加bootstrap.yml文件,配置nacos地址,当前环境,服务名称,文件后缀名,这些就可以决定这个程序去nacos配置中心读取哪一个配置文件的内容。
2024-10-12 20:48:16
2503
原创 nacos的使用
微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。重启后发现dev环境下order-service服务实例,public环境下有user-service服务实例。服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。这样一来order-service服务实例将不能访问user-service服务实例的接口。order-service服务报错,没有user-service这个服务。临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
2024-10-10 22:03:22
1992
原创 微服务概述
单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件。
2024-10-07 21:53:56
1354
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人