054 redisson

news2025/2/24 3:46:44

文章目录

    • 使用Redisson演示可重入锁
    • 读写锁
    • 信号量
    • 闭锁
    • 获取三级分类redisson分布式锁

package com.xd.cubemall.product.config;

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 MyRedissonConfig {

    /**
     * 注册RedissonClient对象
     */
    @Bean(destroyMethod="shutdown")
    RedissonClient redissonClient(){
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        RedissonClient redissonClient = Redisson.create(config);

        return redissonClient;

    }

}

使用Redisson演示可重入锁

    /**
     * 使用Redisson演示可重入锁
     * @return
     */
    @ResponseBody
    @GetMapping("/hello")
    public String hello(){
        //获取一把锁
        RLock lock = redissonClient.getLock("my-lock");
        //加锁
        lock.lock();
        try{
            System.out.println("加锁成功,执行业务。。。" + Thread.currentThread().getId());
            Thread.sleep(10000);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //解锁
            System.out.println("解锁。。。" + Thread.currentThread().getId());
            lock.unlock();
        }


        return "hello";
    }

读写锁

    @GetMapping("/write")
    @ResponseBody
    public String writeValue(){
        //获取一把锁
        RReadWriteLock lock = redissonClient.getReadWriteLock("rw-lock");
        // 加 写锁
        String s = "";
        RLock writeLock = lock.writeLock();

        try{
            //1.改数据加 写锁,读数据加 读锁
            writeLock.lock();
            System.out.println("写锁加锁成功..." + Thread.currentThread().getId());
            s = UUID.randomUUID().toString();
            Thread.sleep(15000);
            redisTemplate.opsForValue().set("writeValue",s);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放锁
            writeLock.unlock();
            System.out.println("写锁。。释放。。"+Thread.currentThread().getId());

        }
        return s;
    }


    @GetMapping("/read")
    @ResponseBody
    public String readValue(){
        RReadWriteLock lock = redissonClient.getReadWriteLock("rw-lock");
        String s = "";
        //加 读锁
        RLock readLock = lock.readLock();
        readLock.lock();
        try {
            System.out.println("读锁...加锁成功..."+Thread.currentThread().getId());
            s = redisTemplate.opsForValue().get("writeValue");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            readLock.unlock();
            System.out.println("读锁。。释放。。。"+Thread.currentThread().getId());

        }
        return s;
    }

信号量

    @GetMapping("/park")
    @ResponseBody
    public String park() throws InterruptedException {
        RSemaphore semaphore = redissonClient.getSemaphore("park");
        //当车位减少为0时,还想获取车位,必须要等go()调用时,释放一个车位,才能进行执行
        semaphore.acquire();//占有一个车位

        return "ok";
    }

    @GetMapping("/go")
    @ResponseBody
    public String go() {
        RSemaphore semaphore = redissonClient.getSemaphore("park");
        semaphore.release();
        return "ok";
    }

闭锁

    @ResponseBody
    @GetMapping("/lockDoor")
    public String lockDoor() throws InterruptedException {
        RCountDownLatch door = redissonClient.getCountDownLatch("door");
        door.trySetCount(5);
        door.await();//等待其他闭锁都完成
        return "关门了";
    }


    @ResponseBody
    @GetMapping("/gogogo/{id}")
    public String gogogo(@PathVariable("id") Long id) {
        RCountDownLatch door = redissonClient.getCountDownLatch("door");
        door.countDown();//计数-1
        return id + "桌的人都走了。。。";
    }

获取三级分类redisson分布式锁


    @Autowired
    private RedissonClient redissonClient;
    /**
     * 获取三级分类(redisson分布式锁)
     * @return
     */

    public List<CategoryVo> getCategoryJsonFromWithRedissonLock() {

        String uuid = UUID.randomUUID().toString();
        //1.占分布式
        RLock lock = redissonClient.getLock("CategoryJson-lock");

        lock.lock();
        List<CategoryVo> dataFromDb = null;
        try {
            dataFromDb = getDataFromDb();
        } finally {
            lock.unlock();
        }

        return dataFromDb;




    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小智机器人CMakeLists编译文件解析

编译完成后&#xff0c;成功烧录&#xff01; 这段代码是一个CMake脚本&#xff0c;用于配置和构建一个嵌入式项目&#xff0c;特别是针对ESP32系列芯片的项目。CMake是一个跨平台的构建系统&#xff0c;用于管理项目的编译过程。 set(SOURCES "audio_codecs/audio_code…

【科研绘图系列】R语言绘制SCI论文图合集

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载Load dataFigure 1Fig 1B: functional assays adhensionFIG 1C: Functional assays OPK Figure 2Fig 2C: Settings and function fo…

VSCode ssh远程连接内网服务器(不能上网的内网环境的Linux服务器)的终极解决方案

VSCode ssh远程连接内网服务器&#xff08;不能上网的内网环境的Linux服务器&#xff09; 离线下载vscode-server并安装: 如果远程端不能联网可以下载包离线安装,下载 vscode-server 的 url 需要和 vscode 客户端版本的 commit-id 对应.通过 vscode 面板的帮助->关于可以获…

支持向量机(SVM):算法讲解与原理推导

1 SVM介绍 SVM是一个二类分类器&#xff0c;它的全称是Support Vector Machine&#xff0c;即支持向量机。 SVM的目标是找到一个超平面&#xff0c;使用两类数据离这个超平面越远越好&#xff0c;从而对新的数据分类更准确&#xff0c;即使分类器更加健壮。比如上面的图中&am…

macos sequoia 禁用 ctrl+enter 打开鼠标右键菜单功能

macos sequoia默认ctrlenter会打开鼠标右键菜单&#xff0c;使得很多软件有冲突。关闭方法&#xff1a; end

Android14 Camera框架中Jpeg流buffer大小的计算

背景描述 Android13中&#xff0c;相机框架包含对AIDL Camera HAL的支持&#xff0c;在Android13或更高版本中添加的相机功能只能通过AIDL Camera HAL接口使用。 对于Android应用层来说&#xff0c;使用API34即以后版本的Camera应用程序通过Camera AIDL Interface访问到HAL层…

springboot系列十四: 注入Servlet, Filter, Listener + 内置Tomcat配置和切换 + 数据库操作

文章目录 注入Servlet, Filter, Listener官方文档基本介绍使用注解方式注入使用RegistrationBean方法注入DispatcherServlet详解 内置Tomcat配置和切换基本介绍内置Tomcat配置通过application.yml完成配置通过类配置 切换Undertow 数据库操作 JdbcHikariDataSource需求分析应用…

区块链共识机制详解

区块链共识机制详解 &#x1f91d; 1. 什么是共识机制&#xff1f; 共识机制是区块链网络中&#xff0c;所有节点就某个状态&#xff08;如交易的有效性&#xff09;达成一致的规则和过程。它解决了在去中心化网络中如何确保数据一致性的问题。 2. 主流共识机制 2.1 工作量证…

详解单例模式、模板方法及项目和源码应用

大家好&#xff0c;我是此林。 设计模式为解决特定问题提供了标准化的方法。在项目中合理应用设计模式&#xff0c;可以避免重复解决相同类型的问题&#xff0c;使我们能够更加专注于具体的业务逻辑&#xff0c;减少重复劳动。设计模式在定义系统结构时通常考虑到未来的扩展。…

解耦的艺术_应用架构中的解耦

文章目录 Pre解耦的技术演化应用架构中的解耦小结 Pre 解耦的艺术_通过DPI依赖倒置实现解耦 解耦的艺术_通过中间层映射实现解耦 解耦的技术演化 技术的演化史&#xff0c;也是一部解耦的历史。从最初的面向对象编程&#xff08;OOP&#xff09;到Spring框架的依赖注入&…

Winform(C#) 项目保存页面

上一张我们已经实现了TCP和串口页面的数据展示&#xff0c;和保存控件 我们这一章&#xff0c;实现如何去&#xff0c;控制保存。 一、控件展示 CheckBox TextBox Button label Name: checkSaveImage checkDelete txtSaveDays txtSaveImagePath btnSelectIm…

LangChain-基础(prompts、序列化、流式输出、自定义输出)

LangChain-基础 我们现在使用的大模型训练数据都是基于历史数据训练出来的&#xff0c;它们都无法处理一些实时性的问题或者一些在训练时为训练到的一些问题&#xff0c;解决这个问题有2种解决方案 基于现有的大模型上进行微调&#xff0c;使得它能适应这些问题&#xff08;本…

蓝思科技赋能灵伴科技:AI眼镜产能与供应链双升级

2月22日&#xff0c;蓝思科技宣布与AI交互领军企业杭州灵伴科技&#xff08;Rokid&#xff09;达成深度战略合作&#xff0c;通过整机组装与全产业链整合&#xff0c;为2025年全球AI眼镜出货量爆发式增长&#xff08;预计达400万-1200万台&#xff09;提供核心支撑。 双方合作通…

2025前端框架最新组件解析与实战技巧:Vue与React的革新之路

作者&#xff1a;飞天大河豚 引言 2025年的前端开发领域&#xff0c;Vue与React依然是开发者最青睐的框架。随着Vue 3的全面普及和React 18的持续优化&#xff0c;两大框架在组件化开发、性能优化、工程化支持等方面均有显著突破。本文将从最新组件特性、使用场景和编码技巧三…

零基础学QT、C++(六)制作桌面摄像头软件

目录 一、前言 二、Python项目包 三、C项目包 四、 项目说明 五、结语 章节汇总 一、前言 上一节&#xff0c;成功导入了OpenCV库 零基础学QT、C&#xff08;四&#xff09;QT程序打包-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞29次&#xff0c;收藏23次。QT程序打包。将项…

python-leetcode-回文链表

234. 回文链表 - 力扣&#xff08;LeetCode&#xff09; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def isPalindrome(self, head: Optional[Lis…

虚拟机从零实现机器人控制

1. 系统安装 因Docker不适合需要图形界面的开发&#xff0c;因此使用虚拟机VMware方便可视化界面方式查看效果&#xff0c;相关软件可以从官网下载&#xff0c;这里有一整套免费安装文件百度网盘地址&#xff1a; 2. ROS安装 Ubuntu 22.04&#xff1a;https://docs.ros.org…

mysql之B+ 树索引 (InnoDB 存储引擎)机制

b树索引机制 B 树索引 (InnoDB 存储引擎)机制**引言&#xff1a;****1. 数据页结构与查找**2. 索引的引入**3. InnoDB 的 B 树索引****4. InnoDB B 树索引的注意事项****5. MyISAM 的索引方案 (选读&#xff0c;与 InnoDB 做对比)****6. MySQL 中创建和删除索引的语句** **B 树…

Unity 聊天气泡根据文本内容适配

第一步 拼接UI 1、对气泡图进行九宫图切割 2、设置底图pivot位置和对齐方式 pivot位置&#xff1a;&#xff08;0&#xff0c;1&#xff09; 对齐方式&#xff1a;左上对齐 3、设置文本pivot位置和对齐方式&#xff0c;并挂上布局组件 pivot设置和对齐方式和底图一样&#…

Android Studio安装配置及运行

一、下载Android Studio 官网下载&#xff1a;下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 跳转到下载界面&#xff0c;选择同意条款&#xff0c;并点击下载&#xff0c;如图&#xff1a; 二、详细安装 双击下载的文件 三、配置Android Studio …