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

Redisson使用示例

1,引入依赖(百度搜索即可)

2,配置yaml

spring:redis:##redis 单机环境配置host: 127.0.0.1# host: 10.192.33.144port: 6379# port: 20051# password: 123456password: ''# database: 1database: 0ssl: false##redis 集群环境配置#cluster:#  nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003#  commandTimeout: 5000redisson:config:single-server-config:address: "redis://${spring.redis.host}:${spring.redis.port}"   

3,创建配置类

package org.springblade.sample.config;import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RedissonConfig {@Value("${redisson.config.single-server-config.address}")private String redisAddress;@Beanpublic RedissonClient redissonClient() {Config config = new Config();config.useSingleServer().setAddress(redisAddress);return Redisson.create(config);}
}

 4,使用示例

	@Resourceprivate RedissonClient redissonClient;//获取初始编码private StringBuffer getInitCode(Integer isForeignInput) {String prefix = isForeignInput == 0 ? "BT" : "SR";String redisKey = CommonConstant.COVID19_ID + "::" + prefix;LocalDate now = LocalDate.now();String yearStr = String.valueOf(now.getYear()).substring(2);// 获取当前编号信息 当前编号long currentNumber = getCodeInfo(redisKey, yearStr, isForeignInput);// 生成新编号return generateCode(yearStr, prefix, currentNumber - 1);}//生成唯一编码private StringBuffer createCode(Integer isForeignInput) {String prefix = isForeignInput == 0 ? "BT" : "SR";String redisKey = CommonConstant.COVID19_ID + "::" + prefix;LocalDate now = LocalDate.now();String yearStr = String.valueOf(now.getYear()).substring(2);// 获取当前编号信息 当前编号long currentNumber = getCodeInfo(redisKey, yearStr, isForeignInput);// 生成新编号return generateCode(yearStr, prefix, currentNumber);}// 获取当前编号信息,返回当前编号private long getCodeInfo(String redisKey, String currentYear, Integer isForeignInput) {if (redisTemplate.hasKey(redisKey)) {String code = (String) redisTemplate.opsForValue().get(redisKey);String[] parts = code.split(",");// 如果年份变化,重置编号if (!parts[0].equals(currentYear)) {return 0L;}return Long.parseLong(parts[1]);} else {// 查询数据库最新数据SampleCovid19 sample = baseMapper.selectPageIn(isForeignInput, CommonConstant.CDC_COVID19);if (sample == null) {return 0L;} else {String number = sample.getSampleNo().substring(sample.getSampleNo().lastIndexOf("-") + 1);return Long.parseLong(number);}}}// 生成编号private StringBuffer generateCode(String yearStr, String prefix, Long number) {StringBuffer code = new StringBuffer();code.append(CommonConstant.CDC_COVID19).append("-").append(yearStr).append("-").append(prefix).append("-").append(number + 1);return code;}// 更新Redis中的编号private void updateCodeInRedis(Integer isForeignInput, String code) {if (StringUtil.isBlank(code)) {return;}String prefix = isForeignInput == 0 ? "BT" : "SR";String redisKey = CommonConstant.COVID19_ID + "::" + prefix;String[] parts = code.split("-");String number = code.substring(code.lastIndexOf("-") + 1);redisTemplate.opsForValue().set(redisKey, parts[2] + "," + number);}//样本插入线程安全public String insertSample(SampleCovid19 sample) {String prefix = sample.getIsForeignInput() == 0 ? "BT" : "SR";String lockKey = CommonConstant.COVID19_CODE_LOCK + prefix;RLock lock = redissonClient.getLock(lockKey);boolean isLocked = false;try {isLocked = lock.tryLock(100, 60, TimeUnit.SECONDS);if (!isLocked) {throw new ServiceException("获取锁超时,请稍后重试");}String sampleNo = this.createCode(sample.getIsForeignInput()).toString();sample.setSampleNo(sampleNo);baseMapper.insert(sample);this.updateCodeInRedis(sample.getIsForeignInput(), sampleNo);log.info("数据添加成功,样本库编号: {}", sampleNo);return sampleNo;} catch (Exception e) {log.error("数据添加失败,样本编号生成已回滚", e);throw new ServiceException("数据插入异常,请联系管理员!");} finally {if (isLocked && lock.isHeldByCurrentThread()) {lock.unlock();}}}

http://www.lryc.cn/news/579467.html

相关文章:

  • 请求未达服务端?iOS端HTTPS链路异常的多工具抓包排查记录
  • 【Bug Recod】更新中...
  • Day50
  • 一文详解Character AI:实用指南+ ChatGPT、Gemini对比分析
  • contenteditable网页富文本编辑无法选中图片
  • Swift 的基础设计哲学是 “通过模块化组合实现安全与效率的平衡“,就像用标准化工业零件建造摩天大楼
  • 一台香港原生ip站群服务器多少钱?
  • 如何在Ubuntu上检查MySQL是否启动并放开3306端口
  • C++笔记-位图和布隆过滤器
  • P1155 [NOIP 2008 提高组] 双栈排序
  • 李宏毅机器学习笔记——梯度下降法
  • 映射阿里云OSS(对象存储服务)
  • 百度文心智能体平台x小米应用商店:联手打造行业首个智能体与应用市场跨端分发模式
  • webrtc-streamer视频流播放(rstp协议h264笔记)
  • KDD 2025 | 地理定位中的群体智能:一个多智能体大型视觉语言模型协同框架
  • Go应用容器化完全指南:构建最小化安全镜像的终极实践
  • I/O 线程 7.3
  • VTK中自定义双组分输入最大值滤波
  • 基于spark的北京房价数据分析及价格预测
  • npm 命令入门指南(前端小白版)
  • 以太坊 Legacy 交易和 EIP-1559 交易
  • C++ 标准模板库算法之 transform 用法
  • RAG从入门到高阶(二):Retrieve-and-Rerank
  • 开源无广告面板mdserver-web:替代宝塔实现服务器轻松管理
  • NCCL的基本使用和常用通信算法源码分析
  • 洛谷-循环结构(1)
  • 前端框架中注释占位与Fragment内容替换的实现与优化
  • 网络基础(3)
  • Spring 6 源码深度掘金:66+核心原理与高频面试攻坚指南
  • 【科研绘图系列】基于R语言的种质资源评分相关性分析与可视化教程