redisson spring boot starter 做分布式锁
使用redisson做分布式锁
分布式锁
在java中单体应用中,我们如果想要保证一个接口或者服务、方法当下只有一个线程在运行,我们可以通过JDK提供的Lock、Semaphore、同步锁等多种方式实现只有一个线程在运行。
在微服务系统中,我们的单体应用会变成多个节点,只靠JDK本身的锁只能控制一个节点的运行,所以我们需要一个可以控制全局的锁来控制系统的运行,这就是所谓的分布式锁。
Zk redis 等中间件都可以做分布式锁,优缺点也各不相同,在我们现在的系统中zk的直接操作还是比较少,更多的是作为dubbo的服务信息储存,所以用Redis做锁的载体。
Redisson是我国的一位大牛写的一个框架,可以使用 redis做类似JDK的全局队列、锁、集合等N多封装好的东西,同时也是redis官方推荐的框架。官方文档地址:
https://github.com/redisson/redisson/wiki
这个主要是入门。
我们的SpringBoot 版本是 1.5.8 ,首先引入SpringBoot starter的依赖,如下:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>2.15.1</version>
</dependency>
Application.yml 中的Redis配置不需要改变,与spring系统兼容,直接可以在代码中使用redisson的api了。
代码:
@Autowired
RedissonClient redissonClient; @Valid
@ApiOperation(value = "测试接口", notes = "通过接口 ,对测试服务连通性", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@RequestMapping(value = "test", method = RequestMethod.POST)
public Response<Void> test() {
RLock rLock = redissonClient.getLock("test1");
rLock.lock();
try {
Thread.sleep(1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (log.isDebugEnabled()) {
log.debug("test welcome.........");
}
rLock.unlock();
return Response.success("响应成功");
}
我本来使用了最新版的starter但是发现有reactor的东西,造成了启动报错,后来去maven仓库翻了一下,发现2.15.1之后的版本,用的都是2.0以后的springBoot,那2.0之后的用的都是Spring 5的版本,所以往后推,看到2.15.1依然是SpringBoot1.5.X 系列的,
所以使用这个版本,没有报错。
这个版本没有redLock,不过无所谓了,应该没啥问题,没那么大的并发,另外,测试过程中,发现那个tryLock有点儿坑,获取锁的时间,没什么用,后续的代码还是可以执行,执行完成后会报错。我们应该会直接用Lock。
所谓的redLock就是 Redis主节点没有写到从节点的时候,另外一个应用的节点去redis同时查看这个锁是否存在,造成死锁,或者没有保证锁的安全性(题外话,网上有很多资料)
redisson spring boot starter 做分布式锁的更多相关文章
- Spring Boot Redis 实现分布式锁,真香!!
之前看很多人手写分布式锁,其实 Spring Boot 现在已经做的足够好了,开箱即用,支持主流的 Redis.Zookeeper 中间件,另外还支持 JDBC. 本篇栈长以 Redis 为例(这也是 ...
- Spring Boot 2实现分布式锁——这才是实现分布式锁的正确姿势!
参考资料 网址 Spring Boot 2实现分布式锁--这才是实现分布式锁的正确姿势! http://www.spring4all.com/article/6892
- Spring Boot Starter 介绍
http://www.baeldung.com/spring-boot-starters 作者:baeldung 译者:http://oopsguy.com 1.概述 依赖管理是任何复杂项目的关键部分 ...
- spring -boot s-tarter 详解
Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合.你可以获取所有Spring及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符.例如,如果你想使用Sprin ...
- 基于 Redis 做分布式锁
基于 REDIS 的 SETNX().EXPIRE() 方法做分布式锁 setnx() setnx 的含义就是 SET if Not Exists,其主要有两个参数 setnx(key, value) ...
- SpringBoot 之Spring Boot Starter依赖包及作用
Spring Boot 之Spring Boot Starter依赖包及作用 spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. spri ...
- Spring Boot Starter列表
转自:http://blog.sina.com.cn/s/blog_798f713f0102wiy5.html Spring Boot Starter 基本的一共有43种,具体如下: 1)spring ...
- 从零开始开发一个Spring Boot Starter
一.Spring Boot Starter简介 Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件 ...
- 最详细的自定义Spring Boot Starter开发教程
1. 前言 随着Spring的日渐臃肿,为了简化配置.开箱即用.快速集成,Spring Boot 横空出世. 目前已经成为 Java 目前最火热的框架了.平常我们用Spring Boot开发web应用 ...
随机推荐
- Asp.netCore 是用的Socket 吗?
Asp.netCore 是用的Socket 的krestrel 用的是Socket! public static IWebHostBuilder CreateDefaultBuilder(string ...
- wstngfw中配置freeradius
wstngfw中配置freeradius Radius为各种网络设备和服务提供了一个认证来源. Radius认证常用于***.入网门户.交换机.路由器和防火墙.Radius认证比在网络上的不同设备跟踪 ...
- vue的data里面的值是数组时,在更改其某一项的时候,怎么触发视图的重新渲染?
1. 设置对象或数组的值:Vue.set(target,key,value) :2.删除对象或数组中元素: Vue.delete ( target,key) ;3. 数组对象直接修改属性,可以触发视图 ...
- MutationObserver
一.MutationObserver Config childList: 添加.删除目标节点的子节点时会收到通知(子节点的后代节点添加或删除时不会收到通知) attribute: 修改目标节点属性时会 ...
- UI5-技术篇-Expand与Deep 服务测试
1.SEGW创建服务 2.创建Data Model 2.1Entity Types ZRICO_USR 设置主键.排序字段.过滤字段 ZRICO_USRITM设置主键 2.2Associations ...
- iOS毛玻璃效果的实现方法
ios开发中常常用到的毛玻璃效果实现方法 iOS8以后使用系统里的UIBlurEffect可以实现,UIBlurEffect继承自UIVisualEffect UIBlurEffectStyle有三个 ...
- MVC-区域(Area)
1.启用路由前的准备工作 1.Global.asax.cs中注册路由 public class MvcApplication : System.Web.HttpApplication { protec ...
- poi 生成word 表格,并向表格单元格中插入多个图片
接这上一篇,导入数据,也要完整导出来.话不多说,直接上代码. 效果图 //根据实体对象 ,生成XWPFDocument public static XWPFDocument exportDataInf ...
- C#-DBHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Mybatis3.1-[tp_36-37]-_映射文件_select_resultMap关联查询__分步查询传递多列值&fetchType_discriminator鉴别器
_分步查询传递多列值&fetchType_discriminator鉴别器 笔记要点出错分析与总结 Department.java bean public class Department { ...