- 博客(19)
- 问答 (1)
- 收藏
- 关注
原创 聊聊Linux环境变量设置与加载优先级
生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bash_profile生效。生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bashrc生效。生效时间:新开终端生效,或者手动source /etc/environment生效。生效时间:新开终端生效,或者手动source /etc/profile生效。生效时间:新开终端生效,或者手动source /etc/bashrc生效。# 如果/etc/profile文件不可编辑,需要修改为可编辑。
2024-06-02 18:28:07
1135
原创 一文搞懂分布式事务Seta-AT模式实现原理
基于JDBC协议实现拦截业务sql,解析sql,根据sql语句中的条件,生成查询查询前像sql语句,在数据库查询,将查询结果当做快照,保存在before image(行记录更新前数据)中,后期如果事务回滚,需要根据before image保存的数据生成反向sql进行回滚。如果回滚,首先将after image中的数据和数据库进行对比,如果一致,利用before image回滚即可,如果不一致,需要人工干预处理,一般不会出现这个问题。后续文章继续讲解具体sql拦截处理过程。第一阶段分成两个步骤。
2024-06-02 14:41:20
1008
原创 一文搞懂分布式事务-Saga
Saga模式是一种分布式事务处理模式,用于保证分布式系统中的一系列操作要么全部成功执行,要么全部回滚,以实现一致性的目标。它采用了长事务的概念,将原子操作拆分为多个子事务,并通过补偿机制保证整个事务的一致性。Saga是一种比较传统的解决方案,传统的业务系统中通常会提供冲正服务,当正向服务执行失败时,业务会自动调用冲正服务,将已经发生变化的数据再修改回去,这种解决思想与Saga相同。
2024-05-31 20:44:06
663
原创 分布式事务-TCC
TCC,全称Try-Confirm-Cancel,是一种用于处理分布式事务的协议。其核心思想是通过在业务逻辑中嵌入三个阶段(Try、Confirm、Cancel)的操作,来确保在分布式事务中,各个参与者能够协同工作,实现事务的原子性。TCC协议本身不保证事务隔离性,一阶段执行完成就提交本地事务,需要业务模型实现时解决事务隔离性问题。
2024-05-29 20:44:46
1407
原创 分布式事务
是指在分布式系统中,涉及多个数据库、服务、消息队列等资源,并且需要保证这些资源上的操作要么全部成功提交,要么全部失败回滚的一种机制。在分布式系统中,由于网络分区、服务故障、数据不一致等问题,传统的单一数据库事务已经无法满足需求,因此需要引入分布式事务来确保数据的一致性和可靠性。:确保分布式事务中的所有操作要么全部成功,要么全部失败。:在分布式事务执行前后,系统中的数据必须保持一致的状态。:在分布式事务执行过程中,多个事务之间不应该相互影响,即一个事务的执行不应该影响其他事务的执行结果。
2024-05-27 06:19:58
629
原创 docker容器网络技术
关于容器网络思考 学习docker零零散散的时间加起来已经好大半年时间了,使用容器像是在变魔术,简单的几个命令就可以将应用启动并可以访问,对于知道内部实现原理的,这种方式很不错,但是对于不清楚原理的同学,这种方式就很危险,可能永远无法弄清楚内部原理。我们知道容器只是linux上受限和孤立的linx进程,运行容器并不需要镜像,相反构建镜像的时候需要运行容器。弄清楚容器网络,首先需要思考如下几个问题:如何虚拟化网络资源,让容器都有一个专用的网络栈?如何将容器变成友好的邻居,防止容器干扰,并教会他们
2022-01-01 14:26:56
1123
原创 sharding-JDBC源码分析(二)SQL解析
SQL parserSQL解析是根据语法与词法分析SQL,理解SQL含义,才能按照SQL语义处理数据,SQL解析是实现分库分表组件最基础的功能,熟悉Mysql架构的,内部也有很重要的一个模块就是SQL parser。Sharding-JDBC目前SQL解析采用的是ANTLR解析器,先前1.x版本是采用的是Druid SQL解析,个人觉得druid SQL解析还是比较容易上手,分库分表中间件Mycat、Dble内部解析都是基于Druid实现的。Druid官方称解析性能比ANTLR这类解析器高10倍。至于s
2020-05-30 22:52:51
1374
原创 sharding-JDBC源码分析(一)标准JDBC接口实现
希望读者看完Sharding-JDBC系列文章后,掌握分库分表核心知识点,了解实现原理,自行实现简单的嵌入式分库分表组件,另外也希望读者思考为什么分库分表?以及分库分表后带来的问题?以及如何处理该类问题等,这也是面试中常见知识点。1、JDBC标准接口JDBC是J2EE的标准规范之一,J2EE就是为了规范JAVA解决企业级应用开发制定的一系列规范,JDBC也不例外。JDBC是用于Java编程语言和数据库之间的数据库无关连接的标准Java API。换句话说,使用JAVA语言连接数据库进行操作,就需要使用J
2020-05-24 14:25:26
806
2
原创 如果你在用sharding-JDBC,建议你看下这里,很关键
Sharding-JDBCSharding-JDBC是ShardingSphere中的一个独立产品,定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。
2020-05-09 21:56:15
1938
原创 菜鸟带你基于redis实现消息队列
背景介绍消息队列在互联网领域得到了广泛应用,主要用于异步处理、模块间解耦和高并发系统的流量削峰等场景中,开源中比较优秀的消息队列有ActiveMq、RocketMq 和Kafka等。本文章主要是基于redis实现消息队列,如有错误,敬请大牛指导,我只是一个在前进中的rookie。基于redis实现消息队列,首先需要了解下面几个redis的命令,命令来源于redis官方。redis命令PUSH...
2020-05-05 20:08:13
677
原创 菜鸟带你手撕分布式锁-zookeeper,看完不会算我输
背景本文章基于zookeeper实现分布式锁,如果有读者想了解基于redis实现分布式锁,可以看我上篇文章菜鸟带你手撕分布式锁-redis,看完不会算我输关于分布式锁产生的背景以及相关概念,这里不做过多解释,可以网上了解。需要读者对zookeeper有一定的了解。zookeeperZooKeeper是一个[分布式]的,开放源码的[分布式应用程序]协调服务,是[Google]的Chubby...
2020-05-04 15:05:22
210
原创 菜鸟带你扩展spring标签,实现自定义bean
扩展spring标签某些场景下我们需要扩展spring标签,让spring可以识别我们自定义的标签,实现自定义bean;比如dubbo中定义dubbo:service 等,shardingsphere在适配spring,在spring配置文件中定义分库分表策略等,今天主要分析如何扩展spring自定义标签以及实现demo。为后边自研分库分表中间件实现spring配置做铺垫。首先需要简单了解以下...
2020-05-03 13:38:46
608
原创 菜鸟带你手撕分布式锁-redis,看完不会算我输
背景今天是五一,决定不出去,在家里撸代码,今天学习redis,于是准备写个基于redis的分布式锁。由于本人属于菜鸟级别,在写的过程中遇到各种问题,功夫不负有心人,终于搞定,如果发现实现有问题,欢迎指导,感谢.在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即...
2020-05-02 10:48:42
224
原创 Druid SQL解析原理以及使用(二)
1、介绍本篇主要介绍Druid采用访问者模式解析SQL,访问者模式,是行为型设计模式之一。访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,这里关于访问者模式不做过多解释,有兴趣的童靴可以去网上查阅。2、visitor模式访问者模式中,接口中定义对象元素方法,每一个元素对应一个方法,供访问者访问,Druid visit...
2020-04-25 21:48:43
8490
3
原创 IDEA 最实用的配置
本文不涉及IDEA快捷键介绍,网上很多可自行Baidu,本文主要是介绍一些IDEA常用的配置,方便开发过程中使用。提升开发效率。忽略大小写开关IDEA默认配置是匹配大小写的,在使用智能提示时,如果你敲 Integer,智能提示是不生效的,但是开启大小写忽略后,可以自动提示。自动生成 serialVersionUID当某个类实现了序列化接口Serializable,需要给seri...
2019-12-22 18:03:02
265
原创 Druid SQL解析原理以及使用(一)
本篇文章主要以使用为主,比如通过解析分析一条SQL的组成来完成SQL改写等,现在流行的数据中间件中使用很广泛,Mycat、Dble等。Druid的SQL解析器主要有三部分组成,如下:1、Parser a、词法分析 b、语法分析2、AST(Abstract Syntax Tree,抽象语法树)3、Visitor1、什么是AST在计算机科...
2019-05-26 19:41:36
28755
26
原创 quartz定时任务不执行不报错处理
用开源定时任务框架Quartz搭建定时任务,任务启动后无任何错误信息输出,也不执行任务。quartz版本 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId&...
2019-03-26 21:15:51
32216
4
空空如也
java算法实现下边案例
2016-11-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人