【Redis 开发】Redisson

2024-04-28 11:20
文章标签 开发 redis redisson

本文主要是介绍【Redis 开发】Redisson,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Redisson

  • Redisson
    • Redisson分布式锁
    • Redisson可重入锁
    • Redission解决超时释放的问题
    • Redission解决锁的判断一次性问题
    • Redission分布式锁主从一致性问题

Redisson

Redisson是一个在Redis的基础上实现的java驻内存数据网格,就是提供了一系列的分布式的java对象
官方地址:https://redisson.org

Redisson分布式锁

第一步:引入依赖

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

第二步:配置Redisson客户端:在配置文件中进行配置
这里通过配置类,完成对Redis的基本配置,在调用Redisson的创建方法根据这个配置类,创建出对应的客户端操作对象RedissonClient


@Configuration
public class RedisConfig {public RedissonClient redissonClient(){//配置类Config config=new Config();//添加redis地址,这里添加单点的地址,也可以使用config.useClusterServers()添加集群地址config.useSingleServer().setAddress("redis://192.168.75.135.101:6379").setPassword("520521");//创建客户端return Redisson.create(config);}
}

如何使用Redisson提供的分布式锁

    @Resourceprivate RedissonClient redissonClient;@Testvoid testRedisson() throws InterruptedException {//获取锁(可重入),指定锁的名称RLock nihao = redissonClient.getLock("nihao");//尝试获取锁,参数分别是,最大等待时间,锁自动释放时间,时间单位boolean b = nihao.tryLock(1, 10, TimeUnit.SECONDS);//判断锁释放获取成功if(b){try{System.out.println("执行业务");}finally {//释放锁nihao.unlock();}}}

Redisson可重入锁

在这里插入图片描述
原理就是在存放value的时候通过计数器机制进行重复访问,当同一个线程在此访问这个锁的时候会进行判断,是不是自己同一个线程,是的话计数器加1,同理释放锁的时候就是将该计数器的数字减1
基本流程:
在这里插入图片描述
要实现上述操作功能需要用到Lua脚本

local key = KEYS[1];-- 锁的key
local threadId = ARGV[1];-- 线程唯一标识
local releaseTime=ARGV[2];--锁的自动释放时间
-- 判断当前锁是否还是被自己持有
if(redis.call('HEXISTs",key,threadId)==0)then
return nil;--如果已经不是自己,则直接返回
end;
--是自己的锁,则重入次数-
1local count =redis.call('HINCRBY",key,threadId,-1);
--判断是否重入次数是否已经为0
if(count>0)then
--大于0说明不能释放锁,重置有效期然后返回
redis.call('EXPIRE",key, releaseTime);
return nil;
--等于0说明可以释放锁,直接删除
else
redis.call('DEL',key);
return nil;
end ;

这是可复用锁的底层原理
在Redisson的操作类中已经实现了可重复锁的相关实现,在获取锁的同时会自动进行重复锁判断

Redission解决超时释放的问题

Redisson底层通过使用Redis的watch机制和Lua脚本来实现解决超时释放锁的问题。当一个线程在获取锁时,Redisson会将锁的持有者信息保存到Redis中,并启动一个定时任务来监控锁的有效期。当锁的有效期超时时,定时任务会使用Lua脚本来检查锁是否还是当前线程持有,如果是则延长锁的有效期,如果不是则释放锁。这种机制可以确保在锁超时释放的情况下,不会出现并发访问问题。通过这种方式,Redisson能够在底层实现有效地解决超时释放的问题。

Redission解决锁的判断一次性问题

前面讲到在进行判断的时候如果没有拿到锁就会返回失败,Redis中提供了重试机制,设置一个最大等待时间,期间进行重复获取锁的操作

Redission分布式锁主从一致性问题

在当下的场景中都是多台Redis服务器进行主从服务器,假定这时有一个线程访问中Redis服务器,成功获取锁,就在这时,主服务器与从服务器同步数据的时候主服务器出现故障,这时Redis哨兵会从从服务器中选出一个来当主服务器,这是锁信息并未同步,就在这时其他线程也能够得到锁进行操作,就会出现问题

解决方案:
在Redisson中提供联锁方案,就是需要同时给多个Redis节点所送锁的信息,这时后就要判断,如果有一个失败,那么所有的节点获取锁都会失败

Rlock lock1=redissonClient.getLock("order");
Rlock lock2=redissonClient2.getLock("order");
Rlock lock3=redissonClient3.getLock("order");
//创建联锁
redissonClient.getMultiLock(lock1,lock2,lock3);

这篇关于【Redis 开发】Redisson的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943124

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

Linux(Centos7)安装Mysql/Redis/MinIO方式

《Linux(Centos7)安装Mysql/Redis/MinIO方式》文章总结:介绍了如何安装MySQL和Redis,以及如何配置它们为开机自启,还详细讲解了如何安装MinIO,包括配置Syste... 目录安装mysql安装Redis安装MinIO总结安装Mysql安装Redis搜索Red