SpringBoot使用分布式锁
SpringBoot使用分布式锁
1、介绍
Redisson是一个基于NIO的Netty框架的企业级的开源Redis Client,也提供了分布式锁的支持,Redisson 是架设在 Redis 基础上的一个 Java 驻内存数据网格框架, 充分利用 Redis 键值数据库提供的一系列优势, 基于 Java 实用工具包中常用接口, 为使用者提供了 一系列具有分布式特性的常用工具类.
2、使用
1、导包
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.13.6</version>
</dependency>
2、创建redisson配置类
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient(){Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(0);RedissonClient redissonClient = Redisson.create(config);return redissonClient;}
}
3、使用
//设置该商品的keyString productKey = "product_001";//使用redisson获取锁RLock lock = redissonClient.getLock(productKey);try{//加锁lock.lock();}finally {//释放锁lock.unlock();}
redisson所有指令都通过lua脚本执行,redis支持lua脚本原子性执行
redisson设置一个key的默认过期时间为30s,如果某个客户端持有一个锁超过了30s怎么办?
redisson中有一个watchdog
的概念,翻译过来就是看门狗,它会在你获取锁之后,每隔10秒检查是否持有锁,如果持有则延长锁时间30s
这样的话,就算一直持有锁也不会出现key过期了,解决其他线程获取到锁的问题了。
redisson的“看门狗”逻辑保证了没有死锁发生。
注意:如果机器宕机了,看门狗也就没了。此时就不会延长key的过期时间,到了30s之后就会自动过期了,其他线程可以获取到锁
这里忽略看 //redis实现分布式锁,使用setIfAbsent方法(等同于redis中的setnx命令)
// Boolean product001 = stringRedisTemplate.opsForValue().
// setIfAbsent(productKey, productVal, 10, TimeUnit.SECONDS);
SpringBoot使用分布式锁相关推荐
- Jmeter Springboot Redisson分布式锁并发订单操作(下单、取消单、完成单、加库存)
Jmeter+Springboot+Redisson分布式锁并发订单操作(下单.取消单.完成单.加库存) 涉及知识点: java+springboot+mybatis开发 redis分布式锁+Redi ...
- zookeeper-常用命令,集成springboot,分布式锁实现和原理 ,dock集群zookeeper搭建,
(一)zookeeper数据模型 树形结构 每个节点里面保存信息 节点拥有子节点 节点是临时的也可以是持久的 四大节点 PERSISTENT-持久化目录节点 客户端与zookeeper断开连接后,该节 ...
- SpringBoot实现分布式锁
SpringBoot.Redis实现分布式锁 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! spark代码案例地址: https ...
- SpringBoot + Redis 分布式锁:模拟抢单
作者:神牛003 cnblogs.com/wangrudong003/p/10627539.html 本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使 ...
- SpringBoot Redis分布式锁
maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s ...
- springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁
本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...
- @transaction使自定义注解失效_【完美】SpringBoot中使用注解来实现 Redis 分布式锁...
一.业务背景 有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响. 二.分析流程 使用 Redis 作为分布式锁,将锁的状态放到 Red ...
- spring-boot 中实现标准 redis 分布式锁
一.前言 redis 现在已经成为系统缓存的必备组件,针对缓存读取更新操作,通常我们希望当缓存过期之后能够只有一个请求去更新缓存,其它请求依然使用旧的数据.这就需要用到锁,因为应用服务多数以集群方式部 ...
- Java基于redis实现分布式锁(SpringBoot)
前言 分布式锁,其实原理是就是多台机器,去争抢一个资源,谁争抢成功,那么谁就持有了这把锁,然后去执行后续的业务逻辑,执行完毕后,把锁释放掉. 可以通过多种途径实现分布式锁,例如利用数据库(mysql等 ...
最新文章
- 【完结】总结12大CNN主流模型架构设计思想
- elasticsearch快照和恢复
- “玩转标签,发现层次的力量!”:跨模态哈希方法研究
- 字典-字典的增删改查常用操作
- 服务器如何用显示器更改ip,ip地址怎么改
- UVA11764 Jumping Mario【Ad Hoc】
- ajax 中文日历显示
- 18岁智商低的表现_孩子反应慢并不是智商低,三个原因很关键,第一个跟父母有关...
- (转)安装完Fedora 18后需要做的事情
- 爱奇艺iOS稳定性测试实践
- [全]win7成功干掉win8--一个小U盘引发的血案(U盘在win8下装win7的方法)Lenovo V580c
- 读书笔记 - 《格鲁夫给经理人的第一课》
- 【深度学习】NLP自然语言处理
- 语音识别—实现百度语音识别
- 怎么禁止浏览器弹框记住/保存密码及不自动填充密码
- 无向图边数和顶点关系_离散数学中的二元关系
- Matlab方根运算
- Coinbase:2023 年 Crypto 市场展望
- Docker部署SQL Server 2019 Always On集群
- [课堂大数据] 苏格拉底教学分析系统