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使用分布式锁相关推荐

  1. Jmeter Springboot Redisson分布式锁并发订单操作(下单、取消单、完成单、加库存)

    Jmeter+Springboot+Redisson分布式锁并发订单操作(下单.取消单.完成单.加库存) 涉及知识点: java+springboot+mybatis开发 redis分布式锁+Redi ...

  2. zookeeper-常用命令,集成springboot,分布式锁实现和原理 ,dock集群zookeeper搭建,

    (一)zookeeper数据模型 树形结构 每个节点里面保存信息 节点拥有子节点 节点是临时的也可以是持久的 四大节点 PERSISTENT-持久化目录节点 客户端与zookeeper断开连接后,该节 ...

  3. SpringBoot实现分布式锁

    SpringBoot.Redis实现分布式锁 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! spark代码案例地址: https ...

  4. SpringBoot + Redis 分布式锁:模拟抢单

    作者:神牛003 cnblogs.com/wangrudong003/p/10627539.html 本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使 ...

  5. SpringBoot Redis分布式锁

    maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s ...

  6. springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁

    本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...

  7. @transaction使自定义注解失效_【完美】SpringBoot中使用注解来实现 Redis 分布式锁...

    一.业务背景 有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响. 二.分析流程 使用 Redis 作为分布式锁,将锁的状态放到 Red ...

  8. spring-boot 中实现标准 redis 分布式锁

    一.前言 redis 现在已经成为系统缓存的必备组件,针对缓存读取更新操作,通常我们希望当缓存过期之后能够只有一个请求去更新缓存,其它请求依然使用旧的数据.这就需要用到锁,因为应用服务多数以集群方式部 ...

  9. Java基于redis实现分布式锁(SpringBoot)

    前言 分布式锁,其实原理是就是多台机器,去争抢一个资源,谁争抢成功,那么谁就持有了这把锁,然后去执行后续的业务逻辑,执行完毕后,把锁释放掉. 可以通过多种途径实现分布式锁,例如利用数据库(mysql等 ...

最新文章

  1. 【完结】总结12大CNN主流模型架构设计思想
  2. elasticsearch快照和恢复
  3. “玩转标签,发现层次的力量!”:跨模态哈希方法研究
  4. 字典-字典的增删改查常用操作
  5. 服务器如何用显示器更改ip,ip地址怎么改
  6. UVA11764 Jumping Mario【Ad Hoc】
  7. ajax 中文日历显示
  8. 18岁智商低的表现_孩子反应慢并不是智商低,三个原因很关键,第一个跟父母有关...
  9. (转)安装完Fedora 18后需要做的事情
  10. 爱奇艺iOS稳定性测试实践
  11. [全]win7成功干掉win8--一个小U盘引发的血案(U盘在win8下装win7的方法)Lenovo V580c
  12. 读书笔记 - 《格鲁夫给经理人的第一课》
  13. 【深度学习】NLP自然语言处理
  14. 语音识别—实现百度语音识别
  15. 怎么禁止浏览器弹框记住/保存密码及不自动填充密码
  16. 无向图边数和顶点关系_离散数学中的二元关系
  17. Matlab方根运算
  18. Coinbase:2023 年 Crypto 市场展望
  19. Docker部署SQL Server 2019 Always On集群
  20. [课堂大数据] 苏格拉底教学分析系统

热门文章

  1. 没看错!用游戏测试人工智能。
  2. 侍魂胧月传说服务器维护中,侍魂胧月传说手游4月8日停机维护更新公告
  3. conda创建Python虚拟环境
  4. kali破解WiFi时wlan0没有变wlan0mon_黑客是如何破解WI-FI密码的?黑客破解了WI-FI之后能做什么?
  5. 如何在 Linux下从普通用户切换到root用户
  6. 离群值(异常值)处理
  7. 纯JavaScript二维码在线生成网页源码
  8. 转载——如何让自己像打王者荣耀一样发了疯、拼了命、石乐志的学习?
  9. WordPress批量修改数据库内文章内容文字关键字标题
  10. lisp 调用opendcl_OpenDCL官方版