目录

一、Redisson的使用

1.Redisson

2.导入依赖

3.建立Redssion配置类

4.使用

二、redisson的可重入锁

1.基本原理

2.test

3.图示


一、Redisson的使用

1.Redisson

Redisson是一个在Redis的基础上实现的Java驻内存管理网络(In-Memory Data Gird), 它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务,其中就包括了各种分布式的实现。

8.分布式锁(Lock)和同步器(Synchronizer)

8.1.可重入锁(Reentrant Lock)

8.2.公平锁(Fair Lock)08.3.联锁(MultiLock)

8.4.红锁(RedLock)
        8.5.读写锁(ReadWriteLock)

8.6.信号量(Semaphore)
        8.7.可过期性信号量(PermitExpirableSemaphore)

8.8.闭锁(CountDownLatch)

官网地址:Redisson: Redis Java client with features of In-Memory Data Grid

GitHub地址:GitHub - redisson/redisson: Redisson - Redis Java client with features of In-Memory Data Grid. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Publish / Subscribe, Bloom filter, Spring Cache, Tomcat, Scheduler, JCache API, Hibernate, MyBatis, RPC, local cache ...

2.导入依赖

这里我们使用maven管理依赖,先导入依赖

        <!--redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version></dependency>

3.建立Redssion配置类

    public class RedissonConfig {public RedissonClient createRedisson() {//配置Config config = new Config();//useSingleServer指的是单例模式,设置redis地址,端口号,密码
config.useSingleServer().setAddress("redis://192.68.23.100:6379").setPassword("zjy123...000");//创建RedissonClient对象return Redisson.create(config);}
}

4.使用

        //使用@Resourceprivate RedissonClient redissonClient;//例子:RLock lock = redissonClient.getLock("lock");//获取锁boolean isLock = lock.tryLock();//执行业务//释放锁lock.unlock("lock");

二、redisson的可重入锁

1.基本原理

利用redis的hash结构存储锁,key值随意,field属性为线程标识,value为锁次数。当线程获取一次锁后,如果此时redis中没有这个锁,则创建并将锁次数置为1;接下来如果线程再次获取锁会进行一次判断。即对比线程标识是否是同一个线程的多次获取,如果是的话锁次数+1。同样的,如果是释放锁的话也需要对线程标识进行判断,然后让对应的锁次数-1,当锁的次数为0时,表示此时可以删除锁了。

2.test

@SpringBootTest
class RedissonTest {@Resourceprivate RedissonClient redissonClient;private RLock lock;@BeforeEachvoid setup() {//对锁进行初始化lock = redissonClient.getLock("lock");}// 方法A@Testvoid A() {//尝试获取锁boolean isLock = lock.tryLock();if(!isLock) {System.out.println("获取锁失败。。。1");return;}try {System.out.println("获取锁成功。。。1");// 获取锁后调用方法BB();System.out.println("开始执行业务。。。1");} finally {System.out.println("准备释放锁。。。1");lock.unlock();}}void B() {//尝试获取锁boolean isLock = lock.tryLock();if(!isLock) {System.out.println("获取锁失败。。。2");return;}try {System.out.println("获取锁成功。。。2");System.out.println("开始执行业务。。。2");} finally {System.out.println("准备释放锁。。。2");lock.unlock();}}}//运行结果
/*
获取锁成功。。。1
获取锁成功。。。2
开始执行业务。。。2
准备释放锁。。。2
开始执行业务。。。1
准备释放锁。。。1
*/

由于执行完成后锁已经被删除,redis内无法看到,所以我们打断点查看一下:

断点1:

 

断点2:

 可以看到此时锁次数变为2。

断点3:

此时方法B执行完,释放了一次锁,锁的次数变为1。

3.图示

Redisson的使用与可重入锁相关推荐

  1. 微服务架构之:Redisson分布式可重入锁原理

    Redisson可重入锁 可重入锁原理 Redisson的锁重试和WatchDog机制 Redisson的multiLock原理 可重入锁原理 我们自定义的分布式锁采用的是Redis的String数据 ...

  2. 年轻人,看看 Redisson 分布式锁—可重入锁吧!太重要了

    作者 | 李祥    责编 | 张文 来源 | 企鹅杏仁技术站(ID:xingren-tech) 引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面 ...

  3. redis分布式锁之redisson可重入锁

    1.上篇讲了java里使用setNX实现redis分布式锁,可是这种方法还是有很多弊端的,追求完美的做法可以使用redisson来实现分布式锁,如下: 2.Redisson 是 java 的 Redi ...

  4. 年轻人,看看Redisson分布式锁—可重入锁吧!太重要了

    1.引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面试中的宠儿,也是工作中解决一些特定场景下的技术问题的银弹.今天我们就来聊聊这些银弹中的其中一枚 ...

  5. 精尽 Redisson 源码分析 —— 可重入分布式锁 ReentrantLock

    1. 概述 在 Redisson 中,提供了 8 种分布锁的实现,具体我们可以在 <Redisson 文档 -- 分布式锁和同步器> 中看到.绝大数情况下,我们使用可重入锁(Reentra ...

  6. redis如何实现分布式重入锁

    redis如何实现分布式重入锁? 在上一节课中,我们已经知道SETNX是不支持重入锁的,但我们需要重入锁,怎么办呢? 目前对于redis的重入锁业界还是有很多解决方案的,最流行的就是采用Redisso ...

  7. 【面试 分布式锁详细解析】续命 自旋锁 看门狗 重入锁,加锁 续命 解锁 核心源码,lua脚本解析,具体代码和lua脚本如何实现

    Redisson实现分布式锁原理 自己实现锁续命 在 controller 里开一个 线程 (可以为 守护线程) 每10秒,判断一个 这个 UUID是否存在,如果 存在,重置为 30秒. 如果不存在, ...

  8. Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁

    List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...

  9. Redission 可重入锁(Reentrant Lock)公平锁(Fair Lock)

    可重入锁(Reentrant Lock) Redisson的分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口,同时还支持自动过期解锁. p ...

最新文章

  1. CSS-布局样式之筛选条件右边线的处理方法(no CSS3)
  2. python官方网站是-Python基础
  3. lua学习笔记之数据结构
  4. html图片重叠在一排,【CSS】使用浮动进行图片排列却不能使图片在同一行
  5. Hadoop企业优化
  6. centos amd双显卡_PCIe4.0和PCIe3.0对显卡性能差别大吗?
  7. rmi远程代码执行漏洞_fastjson远程代码执行漏洞复现
  8. 【Python学习】 caffe-master 之 mnist 详解
  9. python抓取股票数据_Python自动获取当日所有股票数据
  10. JAVA学习笔记(五)
  11. POJ 1611 The Suspects(简单并查集)
  12. MVC多用户B2C商城系统源码分享
  13. Hexo-Next主题配置
  14. 安装CentOS 时找不到硬盘( no usable disks have been found)的解决方法
  15. 使用小程序制作一个飞机大战小游戏
  16. mysql用sql新增字段
  17. Codeforces 14E Camels (DP)
  18. 细胞分裂3[详细剧情过关动画与任务布置详尽翻译]by kuangtian
  19. python爬虫之爬取百度网盘
  20. 软件体系架构阅读笔记(四)

热门文章

  1. 轻松解决在线QQ客服未启用状态
  2. 利用批处理脚本删除指定日期前文件
  3. 河北省邢台市谷歌高清卫星地图下载
  4. 展锐平台的uboot流程
  5. 编译caffe时,遇到问题:无法打开文件“libboost_thread-vc120-mt-gd-1_58.lib
  6. AUTOSAR Diagnosis Message Configuration
  7. apk 反编译工具和方法
  8. 17年,除了代码收入还有房子收入
  9. Intellij IDEA使用破解补丁激活(最新)
  10. 算法竞赛中的JAVA使用笔记