分布式锁Redisson实战(一)RedisUtils工具类和maven坐标

Redis 使用还有项目的中的应用 redis 的使用 Jedis的使用 springboot 项目RedisTemplate使用 redis项目开发中有哪些用途 分布式锁 幂等性,防止重复提交 阅读详情

前言:分布式环境有很多问题,比如你前一个请求访问的是服务器A,第二个请求访问到了服务器B,就会发生并发重复插入问题,这个时候需要依赖单点来实现分布锁,而redis就是。

先导入maven依赖  redission

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

package com.*.data.busisystem;

import org.redisson.Config;
import org.redisson.Redisson;
import org.redisson.RedissonClient;
import org.redisson.SingleServerConfig;
import org.redisson.core.RAtomicLong;
import org.redisson.core.RBucket;
import org.redisson.core.RCountDownLatch;
import org.redisson.core.RDeque;
import org.redisson.core.RList;
import org.redisson.core.RLock;
import org.redisson.core.RMap;
import org.redisson.core.RQueue;
import org.redisson.core.RSet;
import org.redisson.core.RSortedSet;
import org.redisson.core.RTopic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class RedisUtils {
       private static   Logger logger= LoggerFactory.getLogger(RedisUtils.class); 
//       private static RedisUtils redisUtils;
       public RedissonClient redisson = null;
       @Autowired
       private RedisUtils(@Value("${spring.redis.host}") String redisHost,@Value("${spring.redis.port}") String redisPort,@Value("${spring.redis.password:}") String redisPassword){
           Config config = new Config();
            SingleServerConfig singleSerververConfig = config.useSingleServer();
            singleSerververConfig.setAddress(redisHost+":"+redisPort);
            singleSerververConfig.setPassword(redisPassword);
            redisson=Redisson.create(config);
            logger.info("成功连接Redis Server");
       }
       
       /**
        * 提供单例模式
        * @return
        */
       /*public static RedisUtils getInstance(){
          if(redisUtils==null)
             synchronized (RedisUtils.class) {
                if(redisUtils==null) redisUtils=new RedisUtils();
             }
          return redisUtils;
       }*/
       
       
       /**
        * 使用config创建Redisson
        * Redisson是用于连接Redis Server的基础类
        * @param config
        * @return
        */
       public RedissonClient getRedisson(Config config){
          RedissonClient redisson=Redisson.create(config);
          logger.info("成功连接Redis Server");
          return redisson;
       }
       public RedissonClient getRedisson(){
           RedissonClient redisson=this.redisson;
           return redisson;
       }
       
       /**
        * 使用ip地址和端口创建Redisson
        * @param ip
        * @param port
        * @return
        */
       public RedissonClient getRedisson(String ip,String port){
          Config config=new Config();
          config.useSingleServer().setAddress(ip+":"+port);
          RedissonClient redisson=Redisson.create(config);
          logger.info("成功连接Redis Server"+"\t"+"连接"+ip+":"+port+"服务器");
          return redisson;
       }
       
       /**
        * 关闭Redisson客户端连接
        * @param redisson
        */
       public void closeRedisson(RedissonClient redisson){
          redisson.shutdown();
          logger.info("成功关闭Redis Client连接");
       }
       
       /**
        * 获取字符串对象
        * @param redisson
        * @param objectName
        * @return
        */
       public <T> RBucket<T> getRBucket(String objectName){
          RBucket<T> bucket=redisson.getBucket(objectName);
          return bucket;
       }
       
       /**
        * 获取Map对象
        * @param redisson
        * @param objectName
        * @return
        */
       public <K,V> RMap<K, V> getRMap(String objectName){
          RMap<K, V> map=redisson.getMap(objectName);
          return map;
       }
       
       /**
        * 获取有序集合
        * @param redisson
        * @param objectName
        * @return
        */
       public <V> RSortedSet<V> getRSortedSet(String objectName){
          RSortedSet<V> sortedSet=redisson.getSortedSet(objectName);
          return sortedSet;
       }
       
       /**
        * 获取集合
        * @param redisson
        * @param objectName
        * @return
        */
       public <V> RSet<V> getRSet(String objectName){
          RSet<V> rSet=redisson.getSet(objectName);
          return rSet;
       }
       
       /**
        * 获取列表
        * @param redisson
        * @param objectName
        * @return
        */
       public <V> RList<V> getRList(String objectName){
          RList<V> rList=redisson.getList(objectName);
          return rList;
       }
       
       /**
        * 获取队列
        * @param redisson
        * @param objectName
        * @return
        */
       public <V> RQueue<V> getRQueue(String objectName){
          RQueue<V> rQueue=redisson.getQueue(objectName);
          return rQueue;
       }
       
       /**
        * 获取双端队列
        * @param redisson
        * @param objectName
        * @return
        */
       public <V> RDeque<V> getRDeque(String objectName){
          RDeque<V> rDeque=redisson.getDeque(objectName);
          return rDeque;
       }
       
       /**
        * 此方法不可用在Redisson 1.2 中
        * 在1.2.2版本中 可用
        * @param redisson
        * @param objectName
        * @return
        */
       /**
       public <V> RBlockingQueue<V> getRBlockingQueue(String objectName){
          RBlockingQueue rb=redisson.getBlockingQueue(objectName);
          return rb;
       }*/
       
       /**
        * 获取锁
        * @param redisson
        * @param objectName
        * @return
        */
       public RLock getRLock(String objectName){
          RLock rLock=redisson.getLock(objectName);
          return rLock;
       }
       
       /**
        * 获取原子数
        * @param redisson
        * @param objectName
        * @return
        */
       public RAtomicLong getRAtomicLong(String objectName){
          RAtomicLong rAtomicLong=redisson.getAtomicLong(objectName);
          return rAtomicLong;
       }
       
       /**
        * 获取记数锁
        * @param redisson
        * @param objectName
        * @return
        */
       public RCountDownLatch getRCountDownLatch(String objectName){
          RCountDownLatch rCountDownLatch=redisson.getCountDownLatch(objectName);
          return rCountDownLatch;
       }
       
       /**
        * 获取消息的Topic
        * @param redisson
        * @param objectName
        * @return
        */
       public <M> RTopic<M> getRTopic(String objectName){
           RTopic<M> rTopic=redisson.getTopic(objectName);
           return rTopic;
       }
}

 

springboot - 2.7.3版本 - (四)整合Redisson 在redis的基础上添加redisson的使用,主要演示与springboot项目的整合 阅读详情

相关推荐

Redisson分布式锁与Maven依赖Netty冲突的解决办法

通过本文的介绍,我们了解到了Redisson分布式锁与Maven依赖Netty冲突的原因,并提供了两种解决方案:排除冲突的Netty依赖和解决版本冲突。同时,还给出了一个简单的示例代码,展示了如何通过Redisson库实现分布式锁。希望本文能够对你解决类似问题时有所帮助。

CodeHeroicX的博客 1210

redisson maven版本_通过一些常见问题回顾Maven依赖中容易犯错的点

原文地址: http://andresalmiray.com/maven-dependencies-pop-quiz-results/网上看到这篇文章,感觉很有价值,弄清了一些我之前理解错的点,这里翻译并分享下.首先,先上一下我个人总结的结论:Maven依赖可以分为如下几部分:直接依赖,就是本项目 dependencies 部分的依赖间接依赖,就是本项目 dependencies 部分的依赖所包含...

weixin_29158413的博客 3655

Java-基于Redisson的Redis工具类RedissonUtils

通过这个工具类,你可以更方便地管理和操作 Redis 数据,同时利用 Redisson 提供的分布式特性。该工具类涵盖了连接管理、常用操。下面是一个功能丰富的 Redisson 工具类示例实现,包括连接管理、常用操作封装、分布式锁、事。式、缓存策略优化、异步操作、监控和报警、日志和异常处理优化、分布式任务调度以及数据持久。封装了常见的 Redis 数据类型操作方法,如字符串、哈希、列表、集合、有序集合等。作封装、分布式锁、事务支持、管道支持、缓存管理、监控统计以及配置文件支持。

兴趣是最好的老师 834

分布式锁中的王者方案 - Redisson

下面的代码是单节点 Redis 的配置。/*** 对 Redisson 的使用都是通过 RedissonClient 对象* @return*/@Bean(destroyMethod="shutdown") // 服务停止后调用 shutdown 方法。// 1.创建配置// 集群模式// 2.根据 Config 创建出 RedissonClient 示例。

程序员高级码农的博客 1373

winpcap无法安装提示新版本已经安装解决办法

问题显示如下该问题会导致ensp里的云识别不到网卡可能是因为之前安装了npcap,而且安装时勾选了第四个选项导致无法安装,需要完全卸载npcap解决办法:办法一:在控制面板的程序与卸载里面卸载npcap和winPcap,然后再安装winPcap,如果搜不到往下看办法二:在C:\Windows\SysWOW64目录下搜索wpcap.dll和packet.dll并重命名为wpcap.dll.old和packet.dll.old办法三:如果搜不到这两个文件需要安装win10Pcap才能找到这两个文件下载地址:Wi

qq_73202377的博客 3万+

小米手机免登录开启USB安装与调试(MIUI 9-11实测,已Root可用)

本文详细介绍了小米手机免登录开启USB安装与调试的底层方案,适用于已Root的MIUI 9-11版本设备。通过修改系统配置、禁用MIUI安装器验证和强制开启USB调试等步骤,帮助开发者绕过账号限制,实现快速调试。文章包含不同MIUI版本的兼容性处理和常见问题解决方法,实测有效。

weixin_33675507的博客 287

redis分布式锁之redisson使用

public boolean tryLock(String lockKey, TimeUnit unit, long waitTime, long leaseTime) { RLock lock = redissonClient.getLock(lockKey); try { return lock.tryLock(waitTime, leaseTime, unit); } catch (InterruptedException

weixin_39684440的博客 1541

手把手教你用C#实现TwinCAT 3 ADS通讯(附完整代码示例)

本文详细解析了如何使用C#实现TwinCAT 3 ADS通讯,包括协议核心价值、开发环境配置、变量通信实践及高级应用场景。通过完整代码示例和性能优化技巧,帮助开发者高效实现工业自动化系统中的实时数据交换,特别适合倍福(Beckhoff)平台用户。

weixin_29230901的博客 117

SpringBoot集成redisson操作redis

该对象的最大容量受Redis限制,最大元素数量是4294967295个。基于Redisson的分布式Set结构的RSet Java对象实现了java.util.Set接口,通过元素的互相状态比较保证了每个元素的唯一性,该对象的最大容量受Redis限制,最大元素数量是4294967295个。基于Redisson的分布式列表 List 结构的RList Java对象在实现了java.util.List接口的同时,确保了元素插入时的顺序,该对象的最大容量受Redis限制,最大元素数量是4294967295个。

quanzhan_King的博客 6646

【unity小技巧】新输入系统InputSystem游戏运行中改键重新绑定控制按键(最全最完美解决方案)

在游戏开发中,控制输入是至关重要的一环。Unity的新输入系统(Input System)为开发者提供了强大的工具来管理和处理用户输入,不仅支持各种平台上的多种输入设备,还能轻松处理复杂的输入操作和映射。本文将深入探讨如何使用Unity的新输入系统重新绑定控制按键,为开发者提供一套全面且完善的解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7356

网络流量异常信息分析方法研究

本课题针对网络安全中网络流量异常的分析方法进行研究,提出一种基于机器学习和深度学习的异常检测算法。该算法采用卷积神经网络(CNN)和长短时记忆神经网络(LSTM)结合的方式,通过训练得到二分类模型,从而实现对网络流量异常的检测。随着互联网的飞速发展,网络攻击事件日益增多,网络安全问题成为了亟待解决的问题之一。常见的网络攻击手段包括 DDoS 攻击、SQL 注入、XSS 攻击等,这些攻击手段可能导致网络系统发生异常,给网络运维、数据安全带来极大的挑战。

肥晨开发的学习之路 1035

基于Redisson的分布式锁

1、前言 基于Redis实现单节点的分布式锁详见:基于Redis实现单节点分布式锁 本文使用Redisson实现Redis的主从模式、sentinel模式和Cluster模式的分布式锁 2、实现过程 ①、引入redisson的pom依赖; ②、配置SpringBootapplication.yml中的redis信息,注意不同集群模式下要切换端口; ③、配置RedissonUtils,如下: pub...

qq_43060759的博客 309

第95章 安全工程师:Shell 脚本实现安全扫描、漏洞检测、日志审计

随着网络安全威胁日益复杂,传统的手动安全管理已无法满足现代企业的安全需求。Shell 脚本为安全工程师提供了强大的自动化能力,能够实现 7×24 小时的安全监控、快速漏洞扫描、智能日志分析和实时威胁响应。本章将系统介绍如何使用 Shell 脚本构建完整的安全防护体系,从基线检查到实时监控,帮助你打造自动化的安全运维能力。

猪猪侠 90

Redisson实现分布式锁学习

一、SpringBoot集成Redisson 1.1查看Maven依赖 <!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter --> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId&

weixin_41976775的博客 575

PCL:读写pcd点云的两种方式

本文介绍了PCL读写点云的两种方式:PCDReader,PCDWriter;loadPCDFile,savePCDFile.

孙悟空 1万+

ABAP RANGES及比较符号

RANGES *选项介绍: *1.SIGN 值为 I 和 E 。 I是包含, E是排除, 一般使用I。 2.OPTION 如果HIGH 为空 ,为单值选择 。有 EQ、NE、GT、LE、LT等逻辑操作 对于的 CP包含 NP是排除 如果HIGH 不为空 为区间选择 有BT,NB可选 *3.LOW 低值 *4.HIGH 高值 lt:less than 小于 le:less than or equal to 小于等于 eq:equal to 等于 ne:

Pegasus666的博客 5389

RedisUtils工具类

RedisUtils工具类

杜小舟的博客 758

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Redis客户端Redisson使用示例

介绍了Redis客户端Redisson及其应用场景。

快乐江小鱼的博客 3020

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

redisson的使用

1、Redisson工具类 public class RedissonUtil { private RedissonManager redissonManager; private Redisson redisson; public RedissonUtil(RedissonManager redissonManager) { this.redissonManager = redissonManager; this.redisson = redisson

qq_25582465的博客 1366

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Redisson分布式锁入门使用(可重入锁(lock))

Redisson 的可重入锁(lock)是阻塞其他线程的,需要等待其他线程释放锁。

u011529483的博客 6925

Spring Boot基于Redis的Redisson框架实现分布式锁处理并发问题

盲猜大家是碰到了高并发的问题才来看这边文章的(狗头!!) 不知道大家是不是反正我是,被吐槽不会处理并发的开发不是一个合格的开发 。。(心里有个MMP ) 遇到的问题就是经典的抢库存问题,有多人一起同时抢一件商品,如果这是不错特殊处理,我只能说走人也是迟早的事,所以保饭碗要紧好好看好好学 其实处理并发问题不只有这一种处理方式,也可以用redis的特性来处理,或是基于zookeeper实现分布式锁,基于mysql数据库的分布式锁 都可以实现,这个里i 第一步:注入依赖 <dependency>.

LGeorge73的博客 653

redisson整合spring

首先讲下什么是Redisson:Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。(摘自redisson的wiki:wiki地址) redisson提供的api均以面向对象的操作方式,将key-value封装成我们熟悉的集合或者对象,我们可以通过封装的api更

wang_keng的博客 2万+

Redisson实战

记录一下redisson 客户端操作redis list 的使用案例demo。

腾蛟起凤吕学士 437

Redisson

Redisson 是一个在 Java 中广泛使用的分布式和高性能的 Redis 客户端。

xixixixixixixi21的博客 819

springboot整合redisson实现分布式锁

1、为什么要用分布式锁? 在一些高并发的场景中,比如秒杀,抢票,抢购这些场景,都存在对核心资源,商品库存的争夺,控制不好,库存数量可能被减少到负数,出现超卖的情况,或者 产生唯一的一个递增ID,由于web应用部署在多个机器上,简单的同步加锁是无法实现的,给数据库加锁的话,对于高并发,1000/s的并发,数据库可能由行锁变成表锁,性能下降会厉害。这个时候就需要用分布式锁了实现分布式锁的方式很多,我们今天就用redis的分布式锁,redisson也是官方比较推荐的。当然我们其实也可以自己用redis的setn

liangshitian的博客 1万+

【SpringBoot】Redission 的使用与介绍

*** 对 Redisson 的使用都是通过 RedissonClient 对象* @return*/@Bean(name = "redissonClient", destroyMethod = "shutdown") // 服务停止后调用 shutdown 方法// 1、创建配置// 2、集群模式// 根据 Config 创建出 RedissonClient 示例。

yuxiangdeming的博客 6379
上一篇: spring注入map,spring注入一个接口的多个实现类在map里
下一篇: 分布式锁Redisson实战(二)自定义注解
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值