Java 开发

压测工具 JMeter 实操

Java 开发 / 数据库

[升级版]通过 Jdbc + Job 解决跨库大表数据迁移

中间件

ZooKeeper 简单概括

Java 开发

gradle 项目解决 jar 包冲突

Java 开发

异步并发利器:CompletableFuture、parallelStream

Java 开发

junit5 下 wiremock 正确使用方式

Java 开发

多种状态字段的查询性能优化案例

3月29日 · 2020年

线上 JVM 堆内存不足引发BeanCreationNotAllowedException

286 0
线上 JVM 堆内存不足引发BeanCreationNotAllowedException背景某个周六的中午,领导突然找我说线上有大量报错,让我看一下。我发现日志中出现了很多下面的报错信息,而且持续了一段时间(后面才发现收到了告警邮件,但是当时手机没有提醒,强行甩锅...):...
3月27日 · 2020年

多种状态字段的查询性能优化案例

268 0
多种状态字段的查询性能优化案例前提问题当分页查询消息的时候,会查询符合条件的消息total数量,这个操作在查询消息数量比较多的时候,很容易出现timeout(从库查询一万多条消息,count 一下,需要90多秒),经查证,是现有receiver_visible_roles字段导致的:receiver_visible_roles存储:目前这个字段是存了5种角色的可见性,1代表可见,0代表不可见,从高位到低位依次代表:E、D、C、B、A。假如A、B可见,其余角色不可见,则存储00011。receiver_visible_roles查询:假如查A、B可见,其余角色没有限制,则需要 in (00011, 00111, 01011, 01111, 10011, 10111, 11011, 11111),虽然该字段建有索引,并用到了索引,但还是很慢。另,假如再新增角色,查询性能会更慢......
3月20日 · 2020年

[升级版]通过 Jdbc + Job 解决跨库大表数据迁移

281 0
前面写过一篇通过 Jdbc + Job 解决跨库大表数据迁移,那只是个初始版本,后面对其进行了优化改造,数据迁移性能大幅度提升。优化点单实例 Job 优化为多实例 Job单线程优化为多线程普通偏移优化为分段偏移...
11月29日 · 2019年

ZooKeeper 简单概括

412 0
Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。使用ZooKeeper的公司包括Rackspace、雅虎和eBay,以及类似于象Solr这样的开源企业级搜索系统。...
12月1日 · 2019年

本站事故复盘

770 2
2019年11月23日上午9点左右,在没有手动备份的前提下,升级了 MySql 数据库(从5.1到5.7)半小时后,升级结束,网站无法登陆,显示“error establishing a database connection”当时没多想,以为是升级后不兼容导致的,又切换到了5.1版本,网站还是报同样的错误当时由于有别的更重要的事,故先放弃了折腾下午14点左右,还未回家,尝试用手机登陆宝塔面板继续解决,搞了半天无果,故询问宝塔管理员,他让我在服务器上执行ps aux|grep mysql,可是手机端没有尝试过ssh登陆,故暂时放下了手机下午17点左右赶回家,开始查看原因,最后发现 MySql 压根没有安装成功,我又在原版本5.1和新版本5.7之间尝试切换了几次,都无法连接 phpmyadmin...晚上20点左右,打算重装宝塔,先备份数据库,瞬间备份完成,当时心惊了一下,赶紧查看备份好的文件,才几十B,完了,数据全没了..赶紧查看每周通过 shell 脚本备份的数据库压缩包,什么鬼,才几百B,解压,发现里面竟然只有一张用户表..2年的站就这样被自己搞没了......
11月29日 · 2019年

RabbitMQ 发消息报错 Listener not registered

14759 1
在完成 MQ 的发送方代码后,通过单元测试(mock 方式)发现发送方代码是没有问题的,但是通过 JOB 发送消息就一直提示“Listener not registered..”,又通过 http 直接调用接口来发送消息,也是提示“Listener not registered..”,然后各种检查配置、各种谷歌都无济于事,最后只能 debug 源码了。...
12月7日 · 2019年

基于 Redis 实现分布式锁

660 0
分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。由于线上出现了并发问题,导致出现了很多脏数据,分布式环境下,考虑到乐观锁无法解决,也只能请教于分布式锁了。实现分布式锁的方式有:数据库乐观锁、基于 Redis 的分布式锁.....
12月5日 · 2019年

MySQL 中 redo log、undo log、binlog 的总结

7638 1
本文主要总结下重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)的概念。redo log 是物理日志,undo log 和 binlog 是逻辑日志,物理日志的恢复速度远快于逻辑日志。innodb 事务日志包括 redo log 和 undo log,redo log 是重做日志,提供前滚操作,undo log 是回滚日志,提供回滚操作。...
Java 开发More
12月1日 · 2019年

junit5 下 wiremock 正确使用方式

874 0
场景描述 通过 wiremock 方式模拟远程接口调用时,发现注解 @Rule 失效,即下图代码无效:@Rulepublic WireMockRule wireMockRule = new WireMockRule(8080);...
3月27日 · 2020年

多种状态字段的查询性能优化案例

268 0
多种状态字段的查询性能优化案例前提问题当分页查询消息的时候,会查询符合条件的消息total数量,这个操作在查询消息数量比较多的时候,很容易出现timeout(从库查询一万多条消息,count 一下,需要90多秒),经查证,是现有receiver_visible_roles字段导致的:receiver_visible_roles存储:目前这个字段是存了5种角色的可见性,1代表可见,0代表不可见,从高位到低位依次代表:E、D、C、B、A。假如A、B可见,其余角色不可见,则存储00011。receiver_visible_roles查询:假如查A、B可见,其余角色没有限制,则需要 in (00011, 00111, 01011, 01111, 10011, 10111, 11011, 11111),虽然该字段建有索引,并用到了索引,但还是很慢。另,假如再新增角色,查询性能会更慢......
11月29日 · 2019年

Prometheus 监控的开关配置

1162 0
核心服务需要集成 Prometheus 监控,为了防止 Prometheus 监控对接口性能的影响以及灵活的控制监控的接入与解除,故增加一个开关的配置来控制启用和禁用监控服务。本文主要介绍监控开关的配置步骤及中途遇到问题的解决过程。在进入正文前,可先去了解下 Prometheus 监控的介绍及接入步骤,这不是本文的讨论范畴。...
12月2日 · 2019年

gradle 项目解决 jar 包冲突

720 0
现象:当添加 jar 包 "org.apache.shardingsphere:sharding-jdbc-core:4.0.0-RC2"(仅用作举例) 后,idea给出下方的提示,并且很多类文件报错,去掉这个 jar 包后,又恢复正常。故猜测应该是 jar 包冲突导致的。...
1月27日 · 2020年

通过 Jdbc + Job 解决跨库大表数据迁移

577 0
将 scala 项目重构为 Java 微服务,在进行读迁移时,其中有一块业务数据量是亿级别的,需要进行跨库数据迁移(注意:表结构发生了很大变化),并且在迁移过程中尽量做到不停服迁移。针对亿级别的数据量级,肯定不能使用脚本迁移的方式迁移,更不可能使用 mysqldump 命令进行导入导出进行数据迁移。网上还有以导入导出文件的形式迁移百万级数据,但是这个操作需要修改 mysql 的配置,保险起见,直接 pass ...最终,选择通过 Jdbc 配合 Job 在双写阶段进行数据迁移,待数据迁移基本完毕,并且数据一致性校验没问题后,再进行读迁移的上线(此时,只需要业务方上线,将读切换到现在的微服务即可)。...
11月30日 · 2019年

分布式主键调研

839 0
近期要对一个亿级别的表分库分表,一个很重要的环节就是要选定一个分布式主键的生成方式,本文主要总结下对分布式主键调研的结果。分布式主键生成方式主要分为两大类:中心化、去中心化。...
数据库More
12月15日 · 2019年

Error running jOOQ code generation tool: com.mysql.cj.jdbc.Driver..

675 0
今天在用 JOOQ 生成代码的时候,即运行 mvn clean install 命令时,出现以下错误,代码中指定的驱动明明是“com.mysql.jdbc.Driver”,但是报错信息中显示的确是驱动“com.mysql.cj.jdbc.Driver”。经搜索,com.mysql.jdbc.Driver 是 mysql-connector-java 5 中的com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6 及以上版本中的.....
11月29日 · 2019年

数据迁移后的一致性校验

1276 0
目前正在对 scala 项目(某块业务)重构,重构成 Java 微服务,业务、表设计都有些许变化,其中涉及到数据迁移,简单来说就是从老表迁到新表(表结构发生了变化)。为了保证迁移前后数据的一致性,需要进行一些必要的验证。本文主要讨论下自己在进行数据一致性校验时用到的方法,仅仅作为一种数据验证的思路,分享给大家,内容可能有一些瑕疵,欢迎大家指正。...
3月20日 · 2020年

[升级版]通过 Jdbc + Job 解决跨库大表数据迁移

281 0
前面写过一篇通过 Jdbc + Job 解决跨库大表数据迁移,那只是个初始版本,后面对其进行了优化改造,数据迁移性能大幅度提升。优化点单实例 Job 优化为多实例 Job单线程优化为多线程普通偏移优化为分段偏移...
12月10日 · 2019年

MySQL 常用锁和 MVCC 总结

809 0
前段时间,在 scala 项目的某块业务迁移到微服务上线前,测试环境意外地发生了两次死锁问题,触发死锁的原因不同,一次是因为数据迁移不到位,由更新操作导致,解决方式是重写 update 方法。另一个是因为前人写的代码太过于随意,一个事务中包含了多个模版方法,由不同的子类去实现方法,后人在实现时,有可能并不知道自己实现的方法是被嵌套在事务中的,从而扩展了很多操作,操作中不乏有耗时的远程调用,从而一个小事务被慢慢积累成一个大事务,最终导致了死锁,由于老业务(scala 项目)很复杂,当时解决的方式是将死锁的方法异步处理。从那之后,自己断断续续做了一些关于 MySQL 并发相关的笔记,本文先梳理下 MySQL 控制并发访问的两种手段(MVCC 和几种常用锁)。...
12月5日 · 2019年

MySQL 中 redo log、undo log、binlog 的总结

7638 1
本文主要总结下重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)的概念。redo log 是物理日志,undo log 和 binlog 是逻辑日志,物理日志的恢复速度远快于逻辑日志。innodb 事务日志包括 redo log 和 undo log,redo log 是重做日志,提供前滚操作,undo log 是回滚日志,提供回滚操作。...
1月27日 · 2020年

通过 Jdbc + Job 解决跨库大表数据迁移

577 0
将 scala 项目重构为 Java 微服务,在进行读迁移时,其中有一块业务数据量是亿级别的,需要进行跨库数据迁移(注意:表结构发生了很大变化),并且在迁移过程中尽量做到不停服迁移。针对亿级别的数据量级,肯定不能使用脚本迁移的方式迁移,更不可能使用 mysqldump 命令进行导入导出进行数据迁移。网上还有以导入导出文件的形式迁移百万级数据,但是这个操作需要修改 mysql 的配置,保险起见,直接 pass ...最终,选择通过 Jdbc 配合 Job 在双写阶段进行数据迁移,待数据迁移基本完毕,并且数据一致性校验没问题后,再进行读迁移的上线(此时,只需要业务方上线,将读切换到现在的微服务即可)。...
中间件More
11月29日 · 2019年

RabbitMQ 发消息报错 Listener not registered

14759 1
在完成 MQ 的发送方代码后,通过单元测试(mock 方式)发现发送方代码是没有问题的,但是通过 JOB 发送消息就一直提示“Listener not registered..”,又通过 http 直接调用接口来发送消息,也是提示“Listener not registered..”,然后各种检查配置、各种谷歌都无济于事,最后只能 debug 源码了。...
3月17日 · 2020年

Redis中通过scan命令获取key、value【Java实现】

871 0
需求:通过 Job 每秒去 Redis 中获取 Key 前缀为:“message:xxx:yyy:id: ”的所有 Value,Value以字符串类型存储,键值对存储量级:几百万。 Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的 Key 的信息,有两种方式:1、通过 keys 命令,简单粗暴,由于Redis单线程这一特性,keys 命令以阻塞的方式执行。keys 命令通过遍历查找,时间复杂度是 O(n)。Redis 库中 key 的数量越多,查找实现的代价越大,产生阻塞的时间越长。2、通过 scan 命令,以非阻塞的方式实现 key 值的查找,绝大多数情况下是可以替代 keys 命令的,可选性更强。...
11月29日 · 2019年

ZooKeeper 简单概括

412 0
Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。使用ZooKeeper的公司包括Rackspace、雅虎和eBay,以及类似于象Solr这样的开源企业级搜索系统。...
12月7日 · 2019年

基于 Redis 实现分布式锁

660 0
分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。由于线上出现了并发问题,导致出现了很多脏数据,分布式环境下,考虑到乐观锁无法解决,也只能请教于分布式锁了。实现分布式锁的方式有:数据库乐观锁、基于 Redis 的分布式锁.....
11月29日 · 2019年

RabbitMQ 发送端和消费端的总体设计

569 0
使用场景:系统解耦、异步、多服务订阅消息、消息可靠性、消息时序性 发送端:.....
算法相关More
12月29日 · 2019年

数据结构:跳表

583 0
本文主要总结下自己学习跳表时的一些笔记,主要包含跳表的由来、时空复杂度、增删改查和具体应用四个方面。二分查找的数据结构是数组,利用数组随机访问查找的时间复杂度是 O(logn)。如果数据结构是链表,可以达到这样的速度吗?答案是可以的,只是需要对链表进行改造,改造之后的结构就是跳表(又名跳跃表),是一种动态数据结构,可以支持快速的插入、删除、查找、按范围查找,功能类似于红黑树,Redis 中的有序集合使用的就是跳表(后文会说)。...
12月13日 · 2019年

简单递归问题

409 0
需求 给定一个十进制数,每一位要么是 0,要么是 1,为 1 的那一位保持不变,为 0 的那一位可以为 0 也可以为 1,求所有的组合场景。示例:给定 int num = 1001,则 targets = {1001, 1101, 1011, 1111}......
网站建设More
11月28日 · 2019年

Icon 图标自动旋转教程

569 0
教程:拿 wordpress 的 Icon 图标来举例,wor...
11月26日 · 2019年

代码实现网站音乐播放器

557 0
代码实现网站音乐播放器...
12月1日 · 2019年

更新宝塔导致无法访问

490 0
之前使用的是3.xx版本的宝塔,然后在宝塔面板上点击了更新的按钮,结果宝塔直接无法访问了,首先检查了服务器安全组配置是没问题的(8888 端口是放通的),然后通过如下图的命令查看,发现 8888 端口没有被监听到,确定应该是宝塔自身问题导致的,难道是我升级的姿势不对?...
11月29日 · 2019年

刷新主题页面更换背景图片

573 0
教程:将以下代码添加到 header.php 中的 </...
11月28日 · 2019年

鼠标点击显示圆圈动画

739 0
今天,给大家介绍一款 wordpress 鼠标点击特效,当鼠标单击网页...
12月4日 · 2019年

wordpress 设置以 .html 结尾的文章/页面

660 0
设置文章以 .html 结尾:设置->固定链接->...