自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ThreadLocal与内存泄漏问题

文章目录1. ThreadLocal简介1.1 应用场景1.2 举例2. 内存泄漏3. ThreadLocal为什么可能产生内存泄漏4. 如何解决这个问题1. ThreadLocal简介1.1 应用场景ThreadLocal在日常业务开发中并不多见,但应用底层必不可少,在多线程环境下,为每个线程提供一份变量副本,实现变量隔离,防止产生线程安全问题。比如Hibernate就是用了Thread...

2019-11-22 10:58:02 297

原创 缓存与数据库双写一致性问题

1. 场景缓存架构设计,可以提高系统的读性能,在缓存建立key-value的键值对,减少数据库的压力,通常用于读多写少的场景,流程一般如下:用户首先查询缓存(如Redis)是否有相关数据;如果有相关数据,缓存命中,返回查询结果;如果没有相关数据,则查询数据库,将结果放入缓存,同时返回结果;2. 缓存更新策略如果有数据更新,是先操作缓存,还是先操作数据库,这里涉及时序问题;而对于...

2019-09-10 11:31:22 458

原创 由并发扣款如何保证数据一致性引起的幂等性问题的思考

上一篇文章:由并发扣款如何保证数据一致性引起的ABA问题的思考有遗漏场景,公众号 架构师之路 后续出了文章讨论了这个问题,这里附上。1. 回顾在上文并发扣款中的解决方案是采用CAS乐观锁,加入版本号控制。采用 select&set 方式进行余额写回:update t_account set money=#{new_money} , version=#{new_version} wh...

2019-09-06 11:06:50 552

原创 由并发扣款如何保证数据一致性引起的ABA问题的思考

起因是看了公众号架构师之路 推送的一篇文章:并发扣款,如何保证数据的一致性?1. 场景:用户购买商品,对余额进行查询和修改,如果余额大于商品价格,购买商品并修改余额,单机或者无并发情况下,这个步骤没有任何问题;但分布式环境下,不同站点实例的多个业务操作同一个用户进行并发扣款(虽然我也不知道怎么会有这种场景,用户怎么可能在同一时间买多个商品),这样进程内互斥锁肯定无法起作用,最终导致数据不一致。...

2019-08-30 18:05:37 1070

原创 使用自定义注解+AOP实现RateLimiter令牌桶限流

Springboot 2.x + AOP + RateLimiter1. 添加依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> &lt...

2019-08-19 16:10:32 1110 1

原创 Guava-RateLimiter令牌桶限流算法

前言高并发系统一般会才采用三种策略来保护系统:缓存、服务降级、限流;缓存:比如Redis。先查询缓存,如果命中则返回;如果没有数据,查询数据库后返回并写入缓存;服务降级:比如Spring Cloud Hystrix。当服务出现问题需要暂时屏蔽掉,并在上游及时响应用户请求;限流:通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队...

2019-08-15 10:34:02 1558

转载 [转]分布式锁和队列同步器

转自:https://www.jianshu.com/p/cde0700f01281. 可重入锁(Reentrant Lock)Redisson的分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口,同时还支持自动过期解锁。public void testReentrantLock(RedissonClient redisson){...

2019-08-14 09:46:46 178

原创 使用Redisson框架实现分布式锁

之前讲了基于Redis原子操作实现Redis锁,代码比较冗余而且有缺陷,Redis官方推荐Redisson,Redisson提供了很多分布式操作服务,直接调用封装好的API操作,代码更直观。1. 添加依赖 <dependency> <groupId>org.redisson</groupId> &...

2019-08-13 17:01:01 662

原创 [转]SpringBoot集成redisson(单机,集群,哨兵)

到处都是这篇文章的盗版,无法知道原文作者和链接,如果侵权请告知。1.添加依赖<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.8.2</version&...

2019-08-13 10:49:43 2577 3

原创 基于Redis的分布式锁实现方案

1.分布式锁简介简单来说,分布式锁是针对集群环境下多台机器竞争公共资源提出的方案。单机环境下,线程共享堆内存,jdk提供了同步机制来应对资源竞争,比如synchronized关键字,AQS队列同步器等,只要我们设置内存标记,并且这个标记具有原子性和可见性,这样多线程环境下通过标记实现资源的同步操作,这个标记可以理解为锁的实现。所以我们通常会采取synchronized标记方法或代码块,或者Re...

2019-08-12 15:43:08 268

原创 Springboot整合Redis及序列化问题

1.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <ve...

2019-08-08 15:23:04 2106

原创 Springboot整合MongoDB使用baseDao模式

主要介绍Springboot的MongoDB配置,以及使用Springdata访问MongoDB

2019-08-07 17:23:51 1284

原创 Springboot整合RabbitMQ可靠性传输

Springboot整合RabbitMQ可靠性传输(分布式事务部分实现方案)开发环境:rabbitmq-server-3.6.10、otp_win64_19.3(erlang版本);1.RabbitMQ安装问题在安装过程中,可能遇到以下问题:如果同时安装了activemq和rabbitmq,默认配置下会启动失败,这是由于activemq也同时支持多种协议:tcp、amqp、stomp、m...

2019-08-06 16:53:27 757 3

空空如也

空空如也

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

TA关注的人

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