Redisson简介

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。

Redisson使用

1.引入依赖

org.redisson

redisson

3.12.0

2.编写配置类,初始化一个RedissonClient对象

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;

import java.io.IOException;

/**

* @ClassName MyRedissonConfig.java

* @Author 拾光

* @Date 2020年07月25日 18:14:00

* @Description redisson配置类

*/

@Configuration

public class MyRedissonConfig {

/**

* 所有对redisson的使用都是通过RedissonClient来使用

* @return

* @throws IOException

*/

@Bean(destroyMethod="shutdown")

public RedissonClient redisson() throws IOException {

//1 创建配置

Config config = new Config();

config.useSingleServer().setAddress("redis://10.211.55.5:6379");

//2.根据Config创建出RedissonClient

return Redisson.create(config);

}

}

以上方式为但节点模式,也可以配置集群模式:

Config config = new Config();

config.useClusterServers()

.setScanInterval(2000) // 集群状态扫描间隔时间,单位是毫秒

//可以用"rediss://"来启用SSL连接

.addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")

.addNodeAddress("redis://127.0.0.1:7002");

RedissonClient redisson = Redisson.create(config);

3.使用分布式锁进行redis占锁

@Autowired

RedissonClient redisson;

最常见的使用方法:

RLock lock = redisson.getLock("my-lock");

// 最常见的使用方法

lock.lock();

解释说明

使用基本锁以后,redisson使用了自动续期,如果业务超长,运行期间自动续上30s,不用担心业务时间长,锁自动过期被删掉。

大家都知道,如果负责储存这个分布式锁的Redisson节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。

另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。

// 加锁以后10秒钟自动解锁

// 无需调用unlock方法手动解锁

lock.lock(10, TimeUnit.SECONDS);

// 尝试加锁,最多等待100秒,上锁以后10秒自动解锁

boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);

if (res) {

try {

...

} finally {

lock.unlock();

}

}

项目使用以及说明

public String hello(){

//获取一把锁,只要锁的名字一样就是同一把锁

RLock lock = redisson.getLock("my-lock");

//2。加锁

// lock.lock();

//1).redisson的自动续期,如果业务超长,运行期间自动续上30s,不用担心业务时间长,锁自动过期被删掉

//2).加锁得业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s后自动删除

lock.lock(10, TimeUnit.SECONDS);//10秒以后自动解锁,自动解锁时间一定要大于业务时间

// lock.lock(10, TimeUnit.SECONDS)在锁时间到了以后,不会自动续期

//1.如果我们传递了锁的超时时间,就发送给redis执行脚本,进行站锁,默认时间就是我我们传递的时间

//2.如果我们危制定锁的超时时间,就使用lockWatchdogTimeout = 30 * 1000;看门狗默认时间

//只要站锁成功,就会启动定时任务(重新给锁设置过期时间)新的时间就是看门狗的默认时间,每10秒,都会自动续期续成满时间

//最佳实战

//1)lock.lock(10, TimeUnit.SECONDS) 省略了整个续期操作,手动解锁

try {

System.out.println("加锁成功,执行业务"+lock.getName());

Thread.sleep(30000);

} catch (Exception e){

System.out.println(e);

} finally{

//解锁

System.out.println("释放锁"+lock.getName());

lock.unlock();

}

return "hello";

}

本文地址:https://blog.csdn.net/weixin_43691942/article/details/107591137

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

redis 分布式锁 看门狗_分布式锁Redisson的使用,看门狗机制相关推荐

  1. java共享锁和排他锁的区别_排他锁和共享锁分别是什么?有什么不同?

    分布式锁是控制分布式系统之间同步访问共享资源的一种方式.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致 ...

  2. mysql 锁 行级_全局锁、表级锁、行级锁mysql 极客评论笔记

    根据加锁范围:MySQL里面的锁可以分为: 一.全局锁: 对整个数据库实例加锁. MySQL提供加全局读锁的方法:Flush tables with read lock(FTWRL) 这个命令可以使整 ...

  3. java 偏向锁 重偏向_偏向锁的【批量重偏向与批量撤销】机制

    前言 从网上看了很多批量重偏向与批量撤销的介绍,但都一知半解,本着钻研的精神,使用数据进行分析批量重偏向与批量撤销的工作机制. 准备 首先,要先知道偏向锁的偏向锁机制,着重看下撤销机制. 然后,要知道 ...

  4. 电脑硬盘锁怎么解除linux,硬盘锁了怎么办_硬盘锁怎么解除

    2017-01-05 16:01:06 设置方法前提是你的分区为NTFS格式,我们可以使用EFS加密. 1.NTFS分区才能使用EFS加密: 2.我的电脑--工具--文件夹选项--查看--取消简单文件 ...

  5. 一键清除苹果锁屏密码_苹果手机锁屏密码突然不正确了?不要慌!也先不要着急刷机!!!尝试一下以下方式!...

    不少朋友反映IOS13更新后会出现一直以来输入的锁屏密码正确,然后突然有一天锁屏样式改变,原本的密码不能用了.然后多次重复输入最终锁机不得不去刷机的情况,可惜手机里的照片或者资料因为没有来得及保存备份 ...

  6. 锁定计算机忘记密码,笔记本防盗锁忘记密码_笔记本电脑锁忘记密码

    2017-02-04 07:54:44 密码忘记了,只能刷机.要进DFU模式才可以连itunes.摁着HOME+关机10S,放开关机,10S后松开HOME,然后itunes上就会显示一个iphone需 ...

  7. mysql分布式事务wcf_WCF系列_分布式事务(下)

    1.WCF分布式事务例子 这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B的相应账户的资金就增加多少. 系统A机器上有数据库AccountA, ...

  8. Abb机器人看门狗_人类大战机器人!《看门狗2》1.15版本内容公布

    今天(2017年5月16日),育碧正式公布了开放世界动作冒险游戏<看门狗2>1.15版本的更新内容.在本次更新中,玩家将和好友一起进行有史以来难度最高的合作模式并在夺取卡车时面临诸多威胁, ...

  9. python分布式日志收集系统_分布式日志收集系统Scribe原理

    1.分布式日志收集系统:背景介绍 许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征: (1) 构建应 ...

最新文章

  1. ES使用脚本进行局部更新的排错记录
  2. 翻译:Docker方式安装redmine
  3. Spring拓展接口之FactoryBean
  4. UI设计干货模板|首页设计技巧
  5. 程序员面试金典——5.5整数转化
  6. 决策树算法与python——心脏病预测
  7. ctf不允许上传该类型php,d3ctf easyweb题解
  8. 局域网、城域网、广域网、国际互联网(internet)
  9. C语言信息学一本通题库答案,信息学奥赛一本通(C++版)在线评测系统
  10. godaddy 服务器位置,Godaddy DNS服务器列表
  11. tp5模型belongsTo和hasOne以及hasMany的区别与用法
  12. Required request body is missing 报错解决
  13. python numpy 计算标准差
  14. NGUI Sprite的各种Type(Simple、Sliced、Tiled、Filed、Advanced)
  15. 渝粤题库 国家开放大学 学前儿童语言教育 期末考试复习资料
  16. ebay获取商品详情 API接口
  17. c语言时钟加秒表报告,51单片机秒表计时器课程设计报告(含C语言程序)-20210419061005.docx-原创力文档...
  18. 6 zabbix警报邮件发送配置
  19. Vue+element通过接口上传图片给后端
  20. 开源优测-积微速成计划历次任务及总结

热门文章

  1. java开发项目实例_学java开发,项目经验最重要
  2. 服务器镜像工作原理,镜像服务器的原理是什么,怎么工作的
  3. linux中iconv函数,Linux下编码转换(iconv函数族)
  4. string 包含_一文搞懂String常见面试题,从基础到实战,到原理分析和源码解析...
  5. 查看目录是否为内存盘_Linux buff/cache内存释放
  6. Python小白的数学建模课-23.数据拟合全集
  7. jenkins ssh 远程部署_Jenkins部署jar到远程服务器
  8. paramiko执行nohup_记一次使用django+paramiko远程操作时报错无法返回问题
  9. Python操作文件,报FileNotFoundError: [Error 2] No such file or directory错误
  10. python-week5