Category: Java Architecture
In the past few weeks, my team met a critical issue. Our service ABC just upgraded the spring boot version from 2.2.x to 2.7.x. After testing and deployment to the production environment, we found...
高并发下怎么防止数据重复? 多线程并发消费如果在极短的时间内,连续发送重复的消息,就会被不同的线程消费。即使在代码中有这样的判断:
|
Product oldProduct = query(hashCode); if(oldProduct == null) { productMapper.insert(product); } |
在插入数据之前,先判断该数据是否已经存在,只有不存在才会插入。但由于在并发情况下,不同的线程都判断商品数据不存在,于是同时进行了插入操作,所以就产生了重复数据。 方案: 基础系统将消息改成单线程顺序消费 唯一索引(不适用软删除) 分布式锁 insert on duplicate key update insert … ignore 加一张防重表(适用软删除)
消息顺序性,究竟为什么这么难? 面试官问:消息被重复消费,怎么避免?有什么好的解决方案?
We got escalation today, a lot of services are very slow or stop working. Our Oracle database(10g) admin has found that there are a huge number of unclosed sessions in the Oracle database. In...
In Kubernetes, the Liveness and Readiness Kubernetes concepts represent facets of the application state. The Liveness state of an application tells whether the internal state is valid. If Liveness is broken, this means that the application...
数据权限这样设计 RBAC是Role-BasedAccess Control的英文缩写,意思是基于角色的访问控制。
2000 年,Robert C. Martin 给架构师们总结出了一套原则来指导大家进行软件设计,Michael Feathers 随后按首字母将其总结成 SOLID 原则。从那时起,面向对象的 SOLID 设计原则就不断出现在相关书籍当中,并成为业界广为人知的指导方针:单一职责原则、开 / 闭原则、里氏替换原则、接口隔离原则、依赖倒置原则。 Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation principle Dependency inversion principle 在过去的这二十年里,软件开发领域一直在快速演进,特别是近几年云原生和微服务的发展,在微服务体系下,“SOLID 原则是否适合现代软件工程”引起了广泛讨论。
1. Tech Spring Boot 最流行的 16 条实践解读! Spring Boot 项目打包 + Shell 脚本部署详细总结 Spring Boot 实现定时任务的动态增删启停 学会这10种定时任务,我有点飘了 Spring Boot 实现万能文件在线预览 Spring-Retry重试实现原理 重试框架用Guava-Retry,更便捷,更灵活! 那些让你爱不释手的 Spring 代码技巧 @Conditional @Import @ConfigurationProperties 我在 Spring 的 BeanUtils 踩到的那些坑,千万不要犯! Spring的BeanUtils的CopyProperties方法需要对应的属性有getter和setter方法;...
本文从以下几个方面结合真实项目异步改造经验对异步编程进行分析,希望能给大家一些客观的了解: 使用RxJava异步改造后的效果 什么是异步编程?异步实现原理 异步技术选型参考 异步化真正的好处是什么? 异步化落地的难点及解决方案 扩展:异步其他解决方案-协程 一文带你彻底了解Java异步