自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 利用心跳机制进行任务保活

但是我做的场景比较特殊,商品的修改调用的外部接口有额度限制(视频号商品。之前做了一个商品批量修改的功能,这是一个典型的需要长时间处理的任务,因为涉及的商品可能很多(商品维度上万,加上sku还要再乘几倍),涉及到的逻辑也很多,各自调用不同的业务方进行修改同步属性,甚至还有些外部接口。这个比较简单,肯定是需要生成任务记录表,来持久化任务运行的进度,并且增加重试等功能,如果任务进度没有到未完成,就要进行重新触发运行。当重试机制触发后,发现心跳存活,那么本次重试跳过,等待下次重试,这样就保障了不会被并行执行了。

2024-03-15 10:39:56 371

原创 Mysql专栏(五) Mysql高可用

Mysql专栏收尾之作,作为一名后端开发人员,对于Mysql的知识了解到这里已经足以应对99的场景了,毕竟没有必要非要跟DBA抢活儿干。而且现在的趋势都是往云上走,云数据库已经帮我们处理了高可用和数据一致性的事情了,所以当扩展知识了解就好,实际应用场景几乎没有,在本篇文章中并没有给出具体的配置实现。

2023-01-29 16:09:53 428

原创 表数据结构变动、修复表数据的历史版本兼容解决方案

​平时我们做业务需求的时候,难免会碰到有些非常大的改动,大到要修改表结构或者数据结构才能满足,这时候如何能同时兼容老版本的业务与新版本的业务就是一个首要解决问题。

2022-12-02 11:39:11 1309

原创 Tidb 跨分区使用count distinct if 统计不准(有bug)

我们公司使用了tidb,然后我就发现了这东西有点不靠谱,用新技术果然要付出代价。不要问我为什么用,反正很蛋疼。

2022-09-15 20:28:40 670

原创 Mysql专栏(四) Mysql锁机制

本篇文章主要是处理日常工作中面临的Mysql死锁问题以及如何避免产生死锁的指南。

2022-07-29 15:41:19 677

原创 Mysql专栏(三)** Mysql隔离级别与MVCC

本篇文章手动加星,很重要哦。Mysql成为我们现在系统选型不可或缺的一部分,很大一部分功劳归功于其事务特性,本篇文章深入底层讲解其MVCC相关知识。Mysql事务基本概念事务的四个特性ACID不再赘诉原子性:undo log + 隔离性 + 悲观锁,共同保证了一个事务中的操作要么全成功,要么全失败,而其他事务不会看到、修改另一个事务的中间状态。一致性:(个人理解,不一定正确)多个事务会按照开发者期待的顺序执行并得到预期结果。隔离性:MVCC与Mysql隔离级别来保证不同事务的数据隔离。持久性

2022-05-04 01:19:06 307

原创 Zookeeper如何保证数据一致性

Zookeeper如何保证数据一致性​ 虽说zk是比较老的框架了,但是其一致性的保证放在今天的中间件中依然是很强力的存在。其数据持久化的流程也是非常标准的流程,兼具了性能和一致性的取舍,非常值得我们学习。1 zk数据同步简述重要知识点:首先ZK的数据分为两部分,磁盘数据和内存数据磁盘数据:存储在物理介质上的数据(持久化数据),可能与内存数据不一致。内存数据:zk在启动时,会从磁盘上加载数据到内存中,加载数据完成、选举完成、数据同步完成才能对外提供服务,运行期间内,客户端访问的

2022-04-12 19:41:55 4207 10

原创 Mysql专栏(二)Innodb数据写入过程

Mysql Innodb数据写入总览Innodb结构图以下内容参考自Mysql官方文档Innodb数据写入过程(开启binlog)由于innodb需要事务性的保证(redo log、undo log),所以写入流程会复杂一些。首先,在数据要被写入或者修改时,一定要先查找到该数据所位于的page(Mysql操控数据的最小单位),如果page没有位于buffer pool,会发生缺页中断,加载磁盘上的page到buffer pool中。查找到page以后,先要保存当前数据到undo log日志中

2021-09-16 17:15:33 2659 1

原创 Mysql专栏(一)索引结构

1 Mysql中的存储引擎以及索引结构Innodb在平时使用Mysql的过程中,最经常使用的就是Innodb存储引擎了(因为只有它支持事务)在Innodb存储引擎中,索引结构有三类,一是B+树(手动建的索引和主键索引都是B+树),二是Hash索引(没错,mysql中是存在hash索引的,只不过是Mysql自己创建出来的,不能进行自行创建),三是全文索引(没错,mysql中也可以创建全文索引,不过不支持中文,分词做的很差,所以一般没人用)。Innodb为什么要选用B+树的结构这个已经算是常识问题了,我

2021-09-07 17:06:02 215 1

原创 关于Spring提前暴露AOP代理对象时的细节扩展

关于Spring提前暴露AOP时的细节扩展​ 之前对于Spring解决循环依赖时的提前暴露AOP代理对象一直有点懵,所以特此写一遍文章来加深一下理解开篇一张图我们都知道Spring在处理

2021-07-20 15:54:05 1663 3

原创 java8获取两个日期之间的差值

​ 在java8中新提供了LocalDateTime的日期包装类,并且提供了相应的时间辅助类,帮助开发者进行时间计算1.计算日期间隔的两种需求在实际的业务场景中,用到计算两个时间间隔的主要有以下两种方式计算两个日期差了多久(天、小时、分)对于该形式,java8提供了ChronoUnit辅助类,并可以设置时间单位来获取时间差,使用方法如下 LocalDateTime now = LocalDateTime.now(); System.out.println(ChronoUnit.DAYS.

2021-06-25 11:45:27 1966

原创 严格消费顺序、无消息丢失的Kafka配置

强可靠的Kafka配置​ 前段时间做了一次基于binlog的数据同步,由于binlog的场景需要严格的顺序性和可靠的消息存储,所以基于Kafka好好的研究了一下相关配置1.强可靠的含义我目前的场景需要MQ能够做到无消息丢失、严格顺序消费,但是Kafka的默认配置是走吞吐量的,所以在配置上牺牲了Kafka的可用性和性能来尽可能的增强了顺序消费的特点,最终使得Kafka集群的特性为以下四点:可靠存储、严格顺序、低可用、低性能我称之为强可靠Kafka,要做到强可靠,不仅需要Kafka集群的配置更

2021-06-07 15:09:07 355

原创 连续支付(周期扣款)功能开发及注意事项

最近有一个版本需求,需要接入周期扣款做连续会员的功能,没想到这一做就是小半个月,趟了很多坑,所以觉得有必要记录一下1.周期扣款总体设计开篇一张图在支付宝和微信中(非苹果支付),周期扣款的流程主要有以下两种,并且各有利弊先签约,签约成功后再由商户发起主动扣款 #推荐#利端:由于一般来讲连续会员会有额外的折扣优惠,先签约再扣款避免了用户薅羊毛。弊端:签约和发起扣款时分开的,要额外做很多工作保障一致性。并且据微信官方文档,主动扣款是要延迟一段时间才能发起的。支付并完成签约利端:签约和支付是合.

2021-05-27 12:01:24 8275 12

原创 mac下搭建hexo个人博客

最近在搞别的东西的时候,把node版本给升级了,哇,结果hexo那里产生了一堆冲突,最终不得已hexo和相关的主题都跟着升了一下,唉。。也趁着这次机会,把hexo搭建过程重温一下。1.环境准备mac 下搭建hexo主要需要用到以下几个组件(一定要注意大版本,不同版本可能不兼容的)homebrew 用于快速安装以下几个组件git 无具体版本要求node 14.x版本hexo 5.x版本homebrew的话相信用mac的都已经装过了,至于git相信我们做服务端的也都安装了。brew i.

2021-04-19 10:58:37 847

原创 对Spring事务使用不当,第二天来公司就发现被踢出了公司群

Spring 使用事务操作时的细节之前用事务用的不是很多(因为都是微服务框架,一个业务操作都是跨应用的),所以一直对事务没有认真对待,现在发现这里面还有这么多门道。1.事务和分布式锁同时使用,一定要注意彼此的作用域事务在数据库中是有隔离性的,mysql默认的隔离性是RR,不同事务是看不到其他事务未提交的操作的。所以在同时使用分布式锁和事务注解时,一定要注意作用域,如果是以下场景,分布式锁就根本没有起到相应的作用,直接被忽略掉了。这个问题超级坑,很难查,会怀疑人生的。2.this自调用事务失效

2021-04-06 17:51:34 187

原创 使用mybatis的批处理功能,实现批量根据id更新功能

mybatis 批处理使用示例 mybatis预先已经帮我们集成了批量操作sql的功能,但是在和其他人交流的过程中,发现有很多人可能还不知道,所以来写几个例子,示范一下使用批处理功能的准备工作要使用mybatis的批处理功能,首先我们要先能获取到一个mybatis的SqlSessionFactory,用于开启批处理操作。目前,使用最广泛的基本上都已经是java config配置了,配置示例如下@Configuration@MapperScan("com.xx.xx.dal.mappe

2021-03-15 11:22:32 1629

原创 观察elastic search集群的写入速度

​ 最近发现向es集群写数据需要很长的耗时,感觉应该是集群扛不住了,所以想观察一下es目前的写入速度,结果发现这玩意还这么不好看,所以写下此文,分享一下1. 写入速度检测思路es集群没有直接提供相应的接口查询集群写入速度,所以就要曲线救国,我目前采用的思路是,每两秒记录一下当前集群的文档总数,然后计算平均每秒写入速度的方法其脚本如下#!/bin/bashES_HOST='192.168.20.168:9200'ES_DOC_COUNT_REQUEST="curl -s -XG.

2021-03-09 16:29:17 2120

原创 fastjson带有泛型信息的序列化方法

​ 在我们处理网络请求的时候,会需要对网络请求返回的数据序列化成我们自己的对象,这时候带有泛型信息的序列化就尤为重要了1 简单的网络请求示例我这里使用的是okhttp库用于调用网络请求(okhttp简直是最好用的java网络请求库,我要吹爆他),代码调用如下 Response response = OkHttpUtil.getInstance().postWithJson(domainUrl, body); try { if (response.isSuccessful(.

2021-01-27 11:10:35 1483

原创 filebeat + logstash 线上日志结构化收集,让查看日志更方便

线上日志结构化收集​ 写这篇文章的起因是因为在我们的生产环境中,部署节点比较多,机器也比较多,平时看日志只能一台一台登录的去查看,很难受。单纯使用ELK的话,日志内容是非结构化的,就是一大坨文字,非常不直观,因此把我线上结构化日志的流程分享一下1.日志规范定义不管使用什么方式收集,日志的来源是一定要符合我们预想的结构的,否则日志结构化就无从谈起,所以第一步,在我们所有的java应用中首先要规范logback.xml或者其他的日志文件格式,以下是目前我规范出的日志格式 <pa

2020-09-27 19:44:47 1445

原创 如何高性能记录UV、设备去重

1 如何计算UV最简单的计算UV的方式,就是把所有请求的用户id放到set中进行去重,每次用户请求时,都要先获取请求用户列表,再把新用户放入列表去重,再写回列表。但是这样明显随着用户的增长,所需要的空间将会无限制的扩大,非常不可行。第二种高级一点的,就是用BitMap或者布隆过滤器,bitmap使用位运算来减少所消耗的空间,假如用户id为long类型,在java中,一个long需要8字节也就是64位空间存储,如果改用bitmap方法,将会缩小64倍的空间占用。而布隆过滤器所消耗的空间和你所要达到的

2020-06-24 15:49:41 1312

原创 elastic search添加密码验证、并且使用postman访问带密码的es

es集群开启密码验证​ elastic search简称为es,为一个分布式的搜索引擎1 使用ES自带的XPACK开启密码校验在es7.0版本以后(之前的版本没怎么用过,不太清楚)安装包默认自带了xpack功能,所以只需要在es包下的config目录修改一下es的默认配置文件elasticsearch.yml即可,在elasticsearch.yml中追加写入以下参数xpack.security.enabled: true## 加密方式xpack.license.self_

2020-06-22 14:52:03 49545 6

原创 带你手撸令牌桶限流算法

##带你手撸令牌桶限流算法###1.漏桶算法和令牌桶算法漏桶算法和令牌桶算法都属于限流的基本算法,但是各自有各自的特点漏桶算法上图是从网上拷的一张算法示意图,其中,桶的体积表示能够处理请求的最大值,水龙头的水表示外部请求,漏下去的水表示处理的请求。也就是说,不管水龙头的水怎么往下流,开最大也好,关掉也好,都不会影响到桶往下滴水的速度,这也是漏桶算法最核心的一点,能够保证流量的平滑性(...

2020-03-17 17:13:09 510

原创 订单支付相关问题总结

最近公司商城系统要重做,我接手了支付相关的需求,发现里面弯弯绕绕的地方还是有不少的,所以把碰到的问题记录一下。支付问题在第一次对接微信支付时,生成预支付单的接口会让使用微信商家平台的API密钥进行加签,但是就算你使用的API密钥确定没有问题,也可能会返回验签失败,一点办法也没有。 解决方法:使用UUID重新生成了32位纯小写的密钥(我怀疑就是密钥格式问题引起的,从来没有见过密钥让用户手...

2020-01-12 18:15:14 3011

原创 保税仓商品通关注意事项

前段时间因公司业务开展,需要支持保税商品的下单,在接触的过程中,发现这块断断续续做了有两个月,所以趁这个时间,把我踩到的坑全记录一下。1.跨境商品简单介绍目前跨境商品主要可分为两个途径,一是海外直邮,二是保税商品。海外直邮是指由国外直接发快递到国内,优点是不需要在下单的时候做额外的工作量,流程简单,只要通知商家发货就可以。缺点是时间长(十天半个月都是很常见的)、邮费贵、有可能被海关直接...

2019-12-29 22:43:46 2736 4

原创 分库分表下分页查询解决方案

分库分表下分页查询解决方案不管是随着业务量的增大、还是随着用户数量的增长,在单一表中无法承受大量大数据,导致查询速度极慢甚至拖垮数据库。所以分库分表的策略随之应用,但是如何在分库分表的情况下,进行分页查询,目前仍是业界难题。本文记录了三种情况下,对于分库分表下的分页查询优化方案。1 目前大多数的解决方案不管是目前的一些数据库中间件例如Mycat,还是ElasticSearch下的分片查......

2019-08-25 18:28:52 30750 5

原创 java基础知识个人理解

java基础知识个人理解为了方便自己快速的回忆java相关基础知识1.hashmapjava7中Hashmap在并发下有死循环、put或get方法并发问题。死循环是因为hashmap在多线程同时扩容的时候,每个线程各自初始化新的table,再把原先的节点使用头插法链到新的table上,最终会导致节点间出现循环依赖,这样在get方法的时候死循环。java8中使用尾插法,解决了该问题。j...

2019-08-03 12:40:20 237

原创 azkaban入坑指南

azkabanazkaban是一个分布式调度框架,由java语言编写,可以支持工作流的调度以及提供了可视化webUI管理.但是只是原版的azkaban提供的功能还是比较单一的,在数据平台的应用中,需要任务分类、任务优先级、任务血缘图等功能,所以要对azkaban进行二次开发。二次开发前,首先是本地运行、熟悉项目。从github上的master分支拉代码到本地,地址为azkaban1....

2019-07-08 15:19:53 976

原创 spring boot 下 Redisson分布式锁框架简单使用

在项目中要用到分布式锁,之前都是用jedis去实现的,有很多细节方面都有可能出问题,然后在了解到了redisson之后,决定使用这个成熟的框架去实现分布式锁。首先引入jar包,除了spring boot的相关jar包,只引这一个就够了 <dependency> <groupId>org.redisson</gr...

2019-06-11 16:39:03 503

原创 Mysql、Oracle、Sqlserver三种数据源下查询元数据的方法

最近在做数据相关的平台,并且需要支持多数据源,所以把用到的sql记录一下一.链接数据源三种数据源的链接方式都是不同的,所以抽象了几个方法用于获取DB链接数据源链接参数封装类/** * @program: common-info * @description: 数据源属性封装类 * @author: lvqiushi * @create: 2019-03-28 13:51 **...

2019-06-11 16:20:11 1556

翻译 Mybatis-plus搭建过程和代码生成器使用

刚入职新公司,以前一直觉得mybatis-plus没什么可看的,引一引就用上了,现在从头搭发现还是要花点时间的,所以写个帖子记录一下过程。说明:我这里没有用mybatis-plus的新版本(3.0以后),spring-boot用的是2.0.3.RELEASE1.Maven依赖 &lt;!-- mybatis 封装层 --&gt; &lt;dependency&g...

2019-03-15 18:01:08 502

原创 java使用HttpClient调用rest接口上传下载文件

最近接到了做在线文档编辑的需求,普通的rpc接口比如dubbo或者spring cloud的feign对文件流操作支持并不太好,所以用原生的httpClient先写一个出来。上传文件 // upload_url为上传文件的接口调用地址 HttpPost httpPost = new HttpPost(upload_url); // 使用try resource进行httpClient...

2019-03-15 17:35:39 12791 1

原创 elastic job搭建以及集成到spring boot项目

elastic-job基本上是对quartz的再封装,并且使用了zookeeper来实现分布式的定时任务,换句话说把ZK当成了数据库,因为ZK里的数据变更时,每个ZK的客户端都能收到响应,天生支持分布式。elastic-job其实并没有部署一说,只要在应用中引入elastic-job-lite-core包即可,在elastic-job-lite-core的jar包中,封装了对ZK的一系列操作。

2018-05-07 16:56:34 774

原创 整理一下自己遇到的坑

整理一下自己遇到的坑(长期更新)RPC相关1.dubbo中传输的DTO首先一定要序列化,其次不能为LocalDateTime类型,否则会报序列化异常(有可能是我dubbo版本不是最新的原因)Mybatis相关1.新版本的Mybatis,在mapper.xml文件中的方法如果入参类型是JAVA 8 中的新的日期类,如LocalDate,则不能直接通过#{date}的方式在SQ...

2018-04-07 15:03:26 279

原创 spring boot + quartz定时任务框架入坑指南

quartz Quartz是一个功能丰富的开源作业调度库,可以集成到几乎任何Java应用程序中添加Maven依赖 &lt;!-- druid阿里巴巴数据库连接池 --&gt; &lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; ...

2018-03-08 10:21:10 1428 1

原创 在数据库层面上实现插入或更新的操作(mysql)

在平常的程序写插入操作时,一般都会先根据主键去查该条记录是否存在来决定本次是做新增还是更新。但在程序中这样的写法会存在并发问题,会导致同时插入两条一样的数据。 所以推荐在mapper.xml文件中自己实现一个insertOrUpdate的方法,具体如下"insertOrUpdate"> insert into table_name(field1,field2,field3,...

2018-01-28 22:30:55 943

转载 java8新特性学习

JAVA8Stream 流是Java8引入的全新概念,它被用来处理集合中的数据流的特性不会对原有的数据源进行任何的修改,也就不会引发并发问题不能对外部变量进行修改如何创建流 1.使用Stream静态方法来创建StreamStream&lt;String&gt; integerStream = Stream.of("a","b","c");2.通过集...

2018-01-10 22:01:30 196

原创 maven在大型项目中的使用

一个易于维护、扩展的项目,一定会讲究分组件的概念,比如说一个web应用中,进行网关层和服务层的分离,服务层只负责业务逻辑的实现,网关层负责请求转发和调用服务层。在maven中提供了标签实现了这个功能,比如说在idea中,可以通过file->new 来选择modele选项进行创建,每个module都相当于一个独立的spring boot,并在pom.xml中通过以下配置信息声明自己的标识。

2017-12-04 09:42:42 1235

原创 eclipse环境下部署到Tomcat中的项目目录下缺失class文件或者不更新

首先要确定project选项里的Build Automatically勾选上了(自动编译)。因为在项目中可能存在一些问题,比如说maven Install 中有错误但没有发现,就会导致eclipse在编译中出现错误而跳过。在项目的proprites选项中如下图配置,将Abort build when error 的勾去掉,然后重新启动Tomcat即可

2017-10-14 17:32:11 16820 12

原创 处理分布式事务一致性的方法

1.两阶段提交这里只写原理,不谈具体实现过程。 首先需要两个载体,一个是事务提交者,一个是协调器。 第一阶段:协调器向所有的事务提交者发起询问,是否执行了本地事务。不同的事务提交者在本地执行事务,执行成功向协调器发送成功,失败则发送失败(超时也算失败)。 第二阶段:协调器如果在第一阶段收到失败,则通知所有事务提交者进行rollback操作。如果没有收到失败则

2017-10-11 21:07:13 708

原创 Mabatis多表关联注意事项

1.在Mabatis的resultmap中的列名一定要与SQL语句返回结果表中的列名一致。2.查询属性中起别名是为了防止多表关联中有重复的属性名导致查询错误。

2017-09-05 19:15:33 425

空空如也

空空如也

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

TA关注的人

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