Redisson 分布式锁

  • Redis是基础客户端库,可用于执行基本操作。

  • Redisson是基于Redis的Java客户端,提供高级功能如分布式锁、分布式集合和分布式对象。

  • Redisson提供更友好的API,支持异步和响应式编程,提供内置线程安全和失败重试机制。

实现步骤:

 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.0</version></dependency>

@Configuration
public class MyRedissonConfig {@Beanpublic RedissonClient redisson(){Config config = new Config();config.useSingleServer().setAddress("redis://192.168.127.129:6379");RedissonClient redissonClient = Redisson.create(config);return redissonClient;}
}

通过导入坐标和配置,注入RedissonClient对象之后,就可以通过API操作

如:获取可重入锁

@ResponseBody  //因为返回的是json数据@GetMapping("/hello")public String hello(){//获取一把锁  只要锁的名字一样就是通一把锁   是一个可重入的锁RLock myLock = redissonClient.getLock("myLock");/**** 默认都是30s* 加锁   阻塞式等待  锁的自动续期看门狗原理(如果业务超长,会在运行期间自动给锁续上新的30秒)* 不要担心锁自动过期被删除* 加锁的业务完成,就不会续期,即使不手动解锁,锁也会在30秒之后自动解锁  所有不会有死锁问题*///        myLock.lock();//阻塞式等待myLock.lock(10, TimeUnit.SECONDS);//获取锁之后10秒之后自动解锁  不会自动续期  自动解锁时间一定要大于业务执行事件   注意使用try {//业务代码System.out.println("加锁成功 执行业务。。。。"+ Thread.currentThread().getId());Thread.sleep(20000);}catch (Exception e){}finally {//解锁System.out.println("释放锁。。。。"+ Thread.currentThread().getId());myLock.unlock();}return "hello";}

读写锁:保证一定能读到最新数据,修改期间写锁是一个排他锁

        如果都是读,则都会同时加锁成功,可以理解为无锁

        如果先写后读,则必须等待写锁释放才行

        如果同时写,也必须等待写锁释放才行,阻塞的方式、如何

        如果先读后写,也必须等待读锁释放

写锁:是一个互斥锁

读锁:是一个共享锁,和无锁是一样的

        

@ResponseBody  //因为返回的是json数据@GetMapping("/read")public String readValue(){//获取读写锁RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("rw-Lock");String s = "";RLock rLock = readWriteLock.readLock();rLock.lock();try{s = redisTemplate.opsForValue().get("rwLock");}catch (Exception e){}finally {rLock.unlock();}return s;}@ResponseBody  //因为返回的是json数据@GetMapping("/write")public String writeValue(){//获取读写锁RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("rw-Lock");RLock rLock = readWriteLock.writeLock();String s = UUID.randomUUID().toString();try{rLock.lock();redisTemplate.opsForValue().set("rwLock", s);Thread.sleep(30000);}catch (Exception e){}finally {rLock.unlock();}return s;}

 信号量:典型案例车库停车等。。。。

闭锁:案例放假 锁门 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/102673.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中大许少辉博士中国建筑出版传媒八一新书《乡村振兴战略下传统村落文化旅游设计》百度百科新闻

中大许少辉博士中国建筑出版传媒八一新书《乡村振兴战略下传统村落文化旅游设计》百度百科新闻&#xff1a; 乡村振兴战略下传统村落文化旅游设计 - 百度百科 https://baike.baidu.com/item/乡村振兴战略下传统村落文化旅游设计/62588677 概览 《乡村振兴战略下传统村落文化旅游…

星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速

目录 前言 一、思路 二、调整小蜜蜂的移速 三、限制活动范围 四、继续重构 总结 前言 前面我们已经让小蜜蜂左右移动起来了&#xff0c;而且是连续的左右移动&#xff0c;但是在使用的过程中&#xff0c;因为我使用的是笔记本电脑&#xff0c;所以屏幕比较小&#xff0c;设…

分库分表之拆分键设计 | 京东物流技术团队

众所周知&#xff0c;在现实世界中&#xff0c;每一个资源都有其提供能力的最大上限&#xff0c;当单一资源达到最大上限后就得让多个资源同时提供其能力来满足使用方的需求。同理&#xff0c;在计算机世界中&#xff0c;单一数据库资源不能满足使用需求时&#xff0c;我们也会…

Vue2-全局事件总线、消息的订阅与发布、TodoList的编辑功能、$nextTick、动画与过渡

&#x1f954;&#xff1a;高度自律即自由 更多Vue知识请点击——Vue.js VUE2-Day9 全局事件总线1、安装全局事件总线2、使用事件总线&#xff08;1&#xff09;接收数据&#xff08;2&#xff09;提供数据&#xff08;3&#xff09;组件销毁前最好解绑 3、TodoList中的孙传父&…

LRU淘汰策略执行过程

1 介绍 Redis无论是惰性删除还是定期删除&#xff0c;都可能存在删除不尽的情况&#xff0c;无法删除完全&#xff0c;比如每次删除完过期的 key 还是超过 25%&#xff0c;且这些 key 再也不会被客户端访问。 这样的话&#xff0c;定期删除和堕性删除可能都彻底的清理掉。如果…

飞天使-k8s基础组件分析-pod

文章目录 pod介绍pod 生命周期init 容器容器handlerpod中容器共享进程空间sidecar 容器共享 参考链接 pod介绍 最小的容器单元 为啥需要pod? 答: 多个进程丢一个容器里&#xff0c;会因为容器里个别进程出问题而出现蝴蝶效应&#xff0c;pod 是更高级的处理方式pod 如何共享相…

机器学习深度学习——NLP实战(情感分析模型——RNN实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——NLP实战&#xff08;情感分析模型——数据集&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&…

Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四)

Hadoop学习&#xff1a;深入解析MapReduce的大数据魔力之数据压缩&#xff08;四&#xff09; 4.1 概述1&#xff09;压缩的好处和坏处2&#xff09;压缩原则 4.2 MR 支持的压缩编码4.3 压缩方式选择4.3.1 Gzip 压缩4.3.2 Bzip2 压缩4.3.3 Lzo 压缩4.3.4 Snappy 压缩4.3.5 压缩…

Nets3e v1.1.4(攻击者在受害者主机上偷拍并弹出受害者个人照片)

Github>https://github.com/MartinxMax/Nets3e/tree/Nets3e_V1.1.4 首页 历史更新: Nets3e v1.1.4 新增echo参数,-g -echo,生成payload后,受害者泄露的个人照片将会在受害者的主机上弹出展示 Nets3e v1.1.3 修复受害者无法获取公网IP,新增钉钉实时监控推送 Nets3e v1.1…

excel 动态表头与合并列

零、希望Springboot-java导出excel文件&#xff0c;包括动态表头与下边合并的列 使用 org.apache.poi 与自己封装工具类实现相关功能。代码如下 一、代码 1、依赖 implementation(group: org.apache.poi,name: poi-ooxml,version: 4.1.0)implementation(group: org.apache.po…

VR漫游:720度实景参观,打造魅力生态小区

随着城市的不断发展&#xff0c;小区的建设越发具有生态化、绿色化的特点&#xff0c;人们也会偏向选择更加适合居住的小区。为了让更多的用户体验小区的舒适性&#xff0c;不少地产开发商准备引入VR漫游技术。 VR漫游不仅能够真实地展示现场环境&#xff0c;还可以改变传统网络…

【数据结构】实现栈和队列

目录 一、栈1.栈的概念及结构&#xff08;1&#xff09;栈的概念&#xff08;2&#xff09;栈的结构 2.栈的实现&#xff08;1&#xff09;类型和函数的声明&#xff08;2&#xff09;初始化栈&#xff08;3&#xff09;销毁&#xff08;4&#xff09;入栈&#xff08;5&#x…

连接未来 驱动创新|腾讯云 CODING DevOps 主题沙龙诚邀您的参与

点击链接了解详情 随着企业数字化转型步入深水区&#xff0c;DevOps 作为数字化转型关键的内建阶段&#xff0c;其应用和实施已经成为企业提升研发效率&#xff0c;实现快速迭代和持续交付的重要手段。然而如何有效地实施 DevOps&#xff0c;如何利用 DevOps 推动业务发展和创新…

CSS加载失败的6个原因

有很多刚刚接触 CSS 的新手有时会遇到 CSS 加载失败这个问题&#xff0c;但测试时&#xff0c;网页上没有显示该样式的问题&#xff0c;这就说明 CSS 加载失败了。出现这种状况一般是因为的 CSS 路径书写错&#xff0c;或者是在浏览器中禁止掉了 CSS 的加载&#xff0c;可以重新…

vue3 路由缓存问题

目录 解决问题的思路&#xff1a; 解决问题的方案&#xff1a; 1、给roter-view添加key&#xff08;破坏复用机制&#xff0c;强制销毁重建&#xff09; 2、使用beforeRouteUpdate导航钩子 3、使用watch监听路由 vue3路由缓存&#xff1a;当用户从/users/johnny导航到/use…

[网络架构]Self-organized operational neural networks (SelfONN)

Self-organized operational neural networks (SelfONN 背景CNNONNSelfONNCNN, ONN&#xff0c; SelfONN对比SelfONN与CNN的关系总结References 背景 本节要分享的是SelfONN, SelfONN可以看作是ONN的优化/升级&#xff0c; 而ONN可以看作是更一般化的CNN&#xff0c; 克服了CN…

自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam

&#x1f600;前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-RequestParam &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c…

Feign:使用接口方式调用服务

创建一个新的消费者模块并导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ma…

Linux学习之firewallD

systemctl status firewalld.service查看一下firewalld服务的状态&#xff0c;发现状态是inactive (dead)。 systemctl start firewalld.service启动firewalld&#xff0c;systemctl status firewalld.service查看一下firewalld服务的状态&#xff0c;发现状态是active (runni…

无涯教程-PHP - preg_grep()函数

preg_grep() - 语法 array preg_grep ( string $pattern, array $input [, int $flags] ); 返回由与给定模式匹配的输入数组元素组成的数组。 如果将flag设置为PREG_GREP_INVERT&#xff0c;则此函数返回输入数组中与给定模式不匹配的元素。 preg_grep() - 返回值 返回使用…