分布式
可爱徐叔叔
给硬核之王一点威胁好吗
展开
-
使用Redisson框架实现分布式锁
之前讲了基于Redis原子操作实现Redis锁,代码比较冗余而且有缺陷,Redis官方推荐Redisson,Redisson提供了很多分布式操作服务,直接调用封装好的API操作,代码更直观。1. 添加依赖 <dependency> <groupId>org.redisson</groupId> &...原创 2019-08-13 17:01:01 · 645 阅读 · 0 评论 -
[转]分布式锁和队列同步器
转自: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 · 168 阅读 · 0 评论 -
使用自定义注解+AOP实现RateLimiter令牌桶限流
Springboot 2.x + AOP + RateLimiter1. 添加依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <...原创 2019-08-19 16:10:32 · 1093 阅读 · 1 评论 -
Guava-RateLimiter令牌桶限流算法
前言高并发系统一般会才采用三种策略来保护系统:缓存、服务降级、限流;缓存:比如Redis。先查询缓存,如果命中则返回;如果没有数据,查询数据库后返回并写入缓存;服务降级:比如Spring Cloud Hystrix。当服务出现问题需要暂时屏蔽掉,并在上游及时响应用户请求;限流:通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队...原创 2019-08-15 10:34:02 · 1545 阅读 · 0 评论 -
基于Redis的分布式锁实现方案
1.分布式锁简介简单来说,分布式锁是针对集群环境下多台机器竞争公共资源提出的方案。单机环境下,线程共享堆内存,jdk提供了同步机制来应对资源竞争,比如synchronized关键字,AQS队列同步器等,只要我们设置内存标记,并且这个标记具有原子性和可见性,这样多线程环境下通过标记实现资源的同步操作,这个标记可以理解为锁的实现。所以我们通常会采取synchronized标记方法或代码块,或者Re...原创 2019-08-12 15:43:08 · 249 阅读 · 0 评论 -
[转]SpringBoot集成redisson(单机,集群,哨兵)
到处都是这篇文章的盗版,无法知道原文作者和链接,如果侵权请告知。1.添加依赖<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.8.2</version&...原创 2019-08-13 10:49:43 · 2552 阅读 · 3 评论 -
由并发扣款如何保证数据一致性引起的幂等性问题的思考
上一篇文章:由并发扣款如何保证数据一致性引起的ABA问题的思考有遗漏场景,公众号 架构师之路 后续出了文章讨论了这个问题,这里附上。1. 回顾在上文并发扣款中的解决方案是采用CAS乐观锁,加入版本号控制。采用 select&set 方式进行余额写回:update t_account set money=#{new_money} , version=#{new_version} wh...原创 2019-09-06 11:06:50 · 542 阅读 · 0 评论 -
缓存与数据库双写一致性问题
1. 场景缓存架构设计,可以提高系统的读性能,在缓存建立key-value的键值对,减少数据库的压力,通常用于读多写少的场景,流程一般如下:用户首先查询缓存(如Redis)是否有相关数据;如果有相关数据,缓存命中,返回查询结果;如果没有相关数据,则查询数据库,将结果放入缓存,同时返回结果;2. 缓存更新策略如果有数据更新,是先操作缓存,还是先操作数据库,这里涉及时序问题;而对于...原创 2019-09-10 11:31:22 · 446 阅读 · 0 评论