当前位置: 首页 > news >正文

054 redisson

文章目录

    • 使用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")@ResponseBodypublic 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")@ResponseBodypublic 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")@ResponseBodypublic String park() throws InterruptedException {RSemaphore semaphore = redissonClient.getSemaphore("park");//当车位减少为0时,还想获取车位,必须要等go()调用时,释放一个车位,才能进行执行semaphore.acquire();//占有一个车位return "ok";}@GetMapping("/go")@ResponseBodypublic 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();//计数-1return id + "桌的人都走了。。。";}

获取三级分类redisson分布式锁

@Autowiredprivate 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.lryc.cn/news/541859.html

相关文章:

  • 【数据结构】(12) 反射、枚举、lambda 表达式
  • java实现二维码图片生成和编解码
  • Java基础常见的面试题(易错!!)
  • hugging face---transformers包
  • 网络安全防护指南:筑牢网络安全防线(510)
  • 微信小程序实现拉卡拉支付
  • git从本地其他设备上fetch分支
  • 【干货教程】Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
  • 基于 SSM框架 的 “捷邻小程序” 系统的设计与实现
  • 基于Springboot医院预约挂号小程序系统【附源码】
  • 基于AVue的二次封装:快速构建后台管理系统的CRUD方案
  • 【含开题报告+文档+PPT+源码】基于springboot加vue 前后端分离的校园新闻审核发布管理系统
  • Qt 是一个跨平台的 C++ 应用程序框架
  • 2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码
  • 解决Spring Boot中Druid连接池“discard long time none received connection“警告
  • stm32常见的存储器应用
  • 如何使用3D高斯分布进行环境建模
  • 三级分类bug解决
  • AxiosError: Network Error
  • CDefFolderMenu_MergeMenu函数分析之添加了分割线和属性菜单项两项
  • mysql的源码包安装
  • win11系统无法打开软件_组策略无法打开_gpedit.msc不生效_为了对电脑进行保护,已经阻止此应用---Windows工作笔记057
  • 【JAVA】io流之缓冲流
  • from flask_session import Session 为什么是Session(app)这么用?
  • AI赋能的未来城市:如何用智能化提升生活质量?
  • 【Go】Go wire 依赖注入
  • 深度集成DeepSeek与Java开发:智能编码新纪元全攻略 [特殊字符]
  • WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
  • 掌握.NET Core后端发布流程,如何部署后端应用?
  • 深度学习学习笔记(34周)