Redisson的使用与可重入锁
目录
一、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的使用与可重入锁相关推荐
- 微服务架构之:Redisson分布式可重入锁原理
Redisson可重入锁 可重入锁原理 Redisson的锁重试和WatchDog机制 Redisson的multiLock原理 可重入锁原理 我们自定义的分布式锁采用的是Redis的String数据 ...
- 年轻人,看看 Redisson 分布式锁—可重入锁吧!太重要了
作者 | 李祥 责编 | 张文 来源 | 企鹅杏仁技术站(ID:xingren-tech) 引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面 ...
- redis分布式锁之redisson可重入锁
1.上篇讲了java里使用setNX实现redis分布式锁,可是这种方法还是有很多弊端的,追求完美的做法可以使用redisson来实现分布式锁,如下: 2.Redisson 是 java 的 Redi ...
- 年轻人,看看Redisson分布式锁—可重入锁吧!太重要了
1.引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面试中的宠儿,也是工作中解决一些特定场景下的技术问题的银弹.今天我们就来聊聊这些银弹中的其中一枚 ...
- 精尽 Redisson 源码分析 —— 可重入分布式锁 ReentrantLock
1. 概述 在 Redisson 中,提供了 8 种分布锁的实现,具体我们可以在 <Redisson 文档 -- 分布式锁和同步器> 中看到.绝大数情况下,我们使用可重入锁(Reentra ...
- redis如何实现分布式重入锁
redis如何实现分布式重入锁? 在上一节课中,我们已经知道SETNX是不支持重入锁的,但我们需要重入锁,怎么办呢? 目前对于redis的重入锁业界还是有很多解决方案的,最流行的就是采用Redisso ...
- 【面试 分布式锁详细解析】续命 自旋锁 看门狗 重入锁,加锁 续命 解锁 核心源码,lua脚本解析,具体代码和lua脚本如何实现
Redisson实现分布式锁原理 自己实现锁续命 在 controller 里开一个 线程 (可以为 守护线程) 每10秒,判断一个 这个 UUID是否存在,如果 存在,重置为 30秒. 如果不存在, ...
- Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁
List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...
- Redission 可重入锁(Reentrant Lock)公平锁(Fair Lock)
可重入锁(Reentrant Lock) Redisson的分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口,同时还支持自动过期解锁. p ...
最新文章
- CSS-布局样式之筛选条件右边线的处理方法(no CSS3)
- python官方网站是-Python基础
- lua学习笔记之数据结构
- html图片重叠在一排,【CSS】使用浮动进行图片排列却不能使图片在同一行
- Hadoop企业优化
- centos amd双显卡_PCIe4.0和PCIe3.0对显卡性能差别大吗?
- rmi远程代码执行漏洞_fastjson远程代码执行漏洞复现
- 【Python学习】 caffe-master 之 mnist 详解
- python抓取股票数据_Python自动获取当日所有股票数据
- JAVA学习笔记(五)
- POJ 1611 The Suspects(简单并查集)
- MVC多用户B2C商城系统源码分享
- Hexo-Next主题配置
- 安装CentOS 时找不到硬盘( no usable disks have been found)的解决方法
- 使用小程序制作一个飞机大战小游戏
- mysql用sql新增字段
- Codeforces 14E Camels (DP)
- 细胞分裂3[详细剧情过关动画与任务布置详尽翻译]by kuangtian
- python爬虫之爬取百度网盘
- 软件体系架构阅读笔记(四)