Redission 看门狗 学习之笔记

大家好,我叫大鸡腿,大家可以关注下我,会持续更新技术文章还有人生感悟,感谢~

在这里插入图片描述

前言

  相信大家用过Redission吧,那你听过看门狗?没有的话,让鸡腿给你慢慢道来。

  如果一个场景:现在有A,B在执行业务,A加了分布式锁,但是生产环境是各种变化的,如果万一A锁超时了,但是A的业务还在跑。而这时由于A锁超时释放,B拿到锁,B执行业务逻辑。这样分布式锁就失去了意义!

那么如何解决?

  其实就是锁的续期,比如说我A业务还没跑完,你怎么阔以把我的锁超时释放呢?Redission采用看门狗的方法来延长锁持有的时间。

  具体阔以看下我肥朝哥的博客介绍

看门狗

  上面链接有源码解释,我们只是做基本的总结,就是在tryAcquire方法上,他会去开一个线程,不断的去跑,当你还没超时的时候,不断给你续命。

具体规则

  通过源码分析我们知道,默认情况下,加锁的时间是30秒.如果加锁的业务没有执行完,那么到 30-10 = 20秒的时候,就会进行一次续期,把锁重置成30秒.那这个时候可能又有同学问了,那业务的机器万一宕机了呢?宕机了定时任务跑不了,就续不了期,那自然30秒之后锁就解开了呗.

个人的学习发现

既然有看门狗这个特性,我们怎么用?

在Redission配置上加上

config.setLockWatchdogTimeout(3000L);

上面表示设置为3秒,默认是30秒。既然有默认的,为啥我们还要去设置呢?

因为方便我们测试,等那么久,我都可以训练一组俯卧撑了~

总结

如果你要用上看门狗机制,使用tryLock方法!

参考网址

lockwatchdogtimeout

在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Redission是一个基于Redis的分布式Java对象和数据结构的框架。它提供了一系列的功能和特性,其中就包括了Redission看门狗Redission Sentinel)。 Redission看门狗Redission框架中的一部分,它是用来监控和管理Redis Sentinel集群的。Redis Sentinel是Redis的高可用性解决方案,通过运行多个Redis Sentinel进程来监控Redis主从节点的状态,当主节点出现故障时,自动选举新的主节点。 Redission看门狗使用Redis Sentinel提供的API来实现对Redis Sentinel集群的监控和管理。它可以自动发现和监控Redis Sentinel集群中的节点,并在主节点故障时进行故障转移。此外,Redission看门狗还提供了一些其他的功能,如集群拓扑更新、故障转移监听、自动重连等。 要使用Redission看门狗,你需要在你的Java应用中引入Redission的依赖,并配置Redis Sentinel集群的相关信息。然后,你可以使用Redission提供的API来访问和操作Redis Sentinel集群中的数据和对象。 以下是一个简单的示例代码,演示了如何使用Redission看门狗来监控和管理Redis Sentinel集群: ```java Config config = new Config(); config.useSentinelServers() .setMasterName("mymaster") .addSentinelAddress("redis://127.0.0.1:26379", "redis://127.0.0.1:26380") .setDatabase(0); RedissonClient redisson = Redisson.create(config); // 监听Redis Sentinel集群的状态 redisson.getSentinelConnection().addListener(new RedisMasterSlaveDownUpEventListener() { @Override public void onMasterSlaveUp(String masterName, String slaveName) { System.out.println("Master " + masterName + " is up, slave " + slaveName + " is up"); } @Override public void onMasterSlaveDown(String masterName, String slaveName) { System.out.println("Master " + masterName + " is down, slave " + slaveName + " is down"); } }); // 获取Redis Sentinel集群中的某个键值对 RBucket<String> bucket = redisson.getBucket("mykey"); String value = bucket.get(); // 设置Redis Sentinel集群中的某个键值对 bucket.set("myvalue"); // 关闭Redis连接 redisson.shutdown(); ``` 这只是一个简单的示例,你可以根据自己的实际需求,使用Redission看门狗来监控和管理Redis Sentinel集群中的数据和对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值