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;}
相关文章:
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…...
【数据结构】(12) 反射、枚举、lambda 表达式
一、反射 1、反射机制定义及作用 反射是允许程序在运行时检查和操作类、方法、属性等的机制,能够动态地获取信息、调用方法等。换句话说,在编写程序时,不需要知道要操作的类的具体信息,而是在程序运行时获取和使用。 2、反射机制…...
java实现二维码图片生成和编解码
java实现二维码图片生成和编解码 在wutool中,封装了二维码工具类,基于google的zxing库,实现二维码图片生成、编码和解码。 关于wutool wutool是一个java代码片段收集库,针对特定场景提供轻量解决方案,只要按需选择代…...
Java基础常见的面试题(易错!!)
面试题一:为什么 Java 不支持多继承 Java 不支持多继承主要是为避免 “菱形继承问题”(又称 “钻石问题”),即一个子类从多个父类继承到同名方法或属性时,编译器无法确定该调用哪个父类的成员。同时,多继承…...
hugging face---transformers包
一、前言 不同于计算机视觉的百花齐放,不同网络适用不同情况,NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构,transformers库是hugging face社区创造的一个py库,通过该库可以实现统一…...
网络安全防护指南:筑牢网络安全防线(510)
一、网络安全的基本概念 (一)网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...
微信小程序实现拉卡拉支付
功能需求:拉卡拉支付(通过跳转拉卡拉平台进行支付),他人支付(通过链接进行平台跳转支付) 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…...
git从本地其他设备上fetch分支
在 Git 中,如果你想从本地其他设备上获取分支,可以通过以下几种方式实现。不过,需要注意的是,Git 本身是分布式版本控制系统,通常我们是从远程仓库(如 GitHub、GitLab 等)拉取分支,而…...
【干货教程】Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
文章目录 一、环境准备二、安装Ollama2.1 访问Ollama官方网站2.2 下载适用于Windows的安装包2.3 安装Ollama安装包2.4 指定Ollama安装目录2.5 指定Ollama的大模型的存储目录 三、选择DeepSeek R1模型四、下载并运行DeepSeek R1模型五、常见问题解答六、使用Chatbox进行交互6.1 …...
基于 SSM框架 的 “捷邻小程序” 系统的设计与实现
大家好,今天要和大家聊的是一款基于 SSM框架 的 “捷邻小程序” 系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于 SSM框架 的 “捷邻小程序” 系统设计与实现的主要使用者分为 管理员 和 用户,没有授…...
基于Springboot医院预约挂号小程序系统【附源码】
基于Springboot医院预约挂号小程序系统 效果如下: 小程序主页面 帖子页面 医生账号页面 留言内容页面 管理员主页面 用户管理页面 我的挂号页面 医生管理页面 研究背景 随着信息技术的飞速发展和互联网医疗的兴起,传统的医疗服务模式正面临着深刻的变…...
基于AVue的二次封装:快速构建后台管理系统的CRUD方案
基于AVue的二次封装:快速构建后台管理系统的CRUD方案 在开发后台管理系统时,表格是常见的组件之一。然而,使用原生的Element Plus实现CRUD(增删改查)功能往往需要编写大量重复代码,过程繁琐。即使借助类似…...
【含开题报告+文档+PPT+源码】基于springboot加vue 前后端分离的校园新闻审核发布管理系统
开题报告 本研究旨在设计并实现一套基于SpringBoot后端框架结合Vue前端技术的校园新闻发布系统,该系统面向学生用户群体提供了全面的功能服务。学生用户通过身份验证登录后,能够便捷高效地获取校园内的各类新闻资讯,实时了解校内动态。系统不…...
Qt 是一个跨平台的 C++ 应用程序框架
Qt 是一个跨平台的 C++ 应用程序框架,广泛用于开发图形用户界面(GUI)应用程序,也可以用于开发非 GUI 程序,如命令行工具和控制台应用程序。Qt 提供了丰富的类库和工具,支持多种操作系统,包括 Windows、macOS、Linux 等。 主要特点: 跨平台:Qt 支持多种操作系统,开发…...
2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码
一. 真菌生长优化算法(FGO) 真菌生长优化算法(Fungal Growth Optimizer,FGO)是一种新型的自然启发式元启发式算法,其灵感来源于自然界中真菌的生长行为。该算法通过模拟真菌的菌丝尖端生长、分支和孢子萌发…...
解决Spring Boot中Druid连接池“discard long time none received connection“警告
在使用Spring Boot结合Druid连接池时,开发者可能会遇到"discard long time none received connection"的警告信息。虽然这通常不会影响应用程序的正常运行,但这些警告信息可能会让人感到困扰。本文将探讨这个问题的原因,并提供几种…...
stm32常见的存储器应用
常用 STM32 存储器芯片介绍和应用 STM32 微控制器通常与多种存储器芯片一起工作,以下是几种常见的存储器类型及其应用: 1. 闪存(Flash Memory) STM32 内部的 闪存 是一种非易失性存储器,广泛用于存储程序代码和常驻…...
如何使用3D高斯分布进行环境建模
使用3D高斯分布来实现建模,主要是通过高斯分布的概率特性来描述空间中每个点的几何位置和不确定性。具体来说,3D高斯分布被用来表示点云数据中的每一个点或体素(voxel)的空间分布和不确定性,而不是单纯地存储每个点的坐…...
三级分类bug解决
文章目录 前端后端 前端 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org" lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…...
AxiosError: Network Error
不知怎么的,项目还在开发阶段,之前还好好的,玩儿了两天再一打开发现页面无法显示数据了,报错如下: 我以为是后端出问题了,但是后端控制台无报错,又用postman测试了一下,可以获取到数…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
