首页 > 数据库 >redisson的Lock,SpinLock与FencedLock

redisson的Lock,SpinLock与FencedLock

时间:2022-12-28 15:23:58浏览次数:68  
标签:10 令牌 redisson Lock unlock token lock FencedLock

Lock

 

redisson的基本lock实现, 使用发布订阅机制实现通信

可以查看源码中pubSub的相关使用

SpingLock


使用"Exponential Backoff strategy"指数退避策略实现的分布式锁,区别于基本的RedissonLock的发布订阅模式,SpingLock使用的是有规律的不断重试来获取锁信息,他可以解决几千个对象竞争锁带来的redis的cpu飙升问题
Exponential Backoff strategy具体的实现就是设定一个初始时间来竞争锁,如果失败就不断翻倍这个时间,这个时间在SpingLock中有最大值

image

FencedLock

image

这种类型的锁会维护隔离令牌,以避免客户端由于长时间GC暂停或其他原因而延迟获取锁,从而无法检测到它不再拥有锁的情况。要解决这个问题,令牌由锁定方法或getToken()方法返回。令牌应该检查是否大于或等于该锁保护的服务的前一个令牌,如果condition为false则拒绝操作。

以下是官方文档

RFencedLock lock = redisson.getFencedLock("myLock");

// traditional lock method
Long token = lock.lockAndGetToken();

// or acquire lock and automatically unlock it after 10 seconds
token = lock.lockAndGetToken(10, TimeUnit.SECONDS);

// or wait for lock aquisition up to 100 seconds 
// and automatically unlock it after 10 seconds
Long token = lock.tryLockAndGetToken(100, 10, TimeUnit.SECONDS);
if (token != null) {
   try {
     // check if token >= old token
     //不断获取token来与之前的比较,此处如果检查结果为false说明锁失效
     ...
   } finally {
       lock.unlock();
   }
}

参考

官方文档

标签:10,令牌,redisson,Lock,unlock,token,lock,FencedLock
From: https://www.cnblogs.com/funkboy/p/17010202.html

相关文章

  • Redisson使用起来很方便,但是需要redis环境支持eval命令
     Redisson使用起来很方便,但是需要redis环境支持eval命令,否则一切都是悲剧,比如me.结果还是要用RedisCommands去写一套。例子就如下,获得一个RLock锁对象,然后tryLock和unlock......
  • 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结
    适用阻塞队列的好处:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距。当许......
  • Easy App Locker - 给你的 mac 应用加锁保护你的隐私
    EasyAppLocker可以对Mac上的单个应用进行密码保护。维护Mac上的隐私。像如果你的某个应用存在隐私数据就可以使用该软件将此应用上锁,这样当你的朋友使用你的mac时你......
  • 解决 Ubuntu apt-get Could not get lock varlibdpkglock-frontend
    解决Ubuntuapt-getCouldnotgetlock/var/lib/dpkg/lock-frontend.E:Couldnotgetlock/var/lib/dpkg/lock-frontend.Itisheldbyprocess1927(unattended-......
  • ReentrantReadWriteLock读写锁和StampedLock邮戳锁
    ReentrantReadWriteLock读写锁定义:一个资源能够被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程,只有在读多写少的情况下,读写锁才有较高的性能体现。缺点......
  • Java同步器之ReentrantLock源码分析(一)
    一、概述ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Syn......
  • clock函数返回负值
    使用clock()函数来进行计时,时不时的返回一个很大的负数,怎么检查也检查不出错误,现在找出错误原因,给大家分享一下。来源网页:http://kebe-jea.blogbus.com/logs/33603387.ht......
  • ReentrantLock Condition await signal 专题
     Condition的执行方式,是当在线程T1中调用await方法后,线程T1将释放锁,并且将自己阻塞,等待唤醒,线程T2获取到锁后,开始做事,完毕后,调用Condition的signal方法,唤醒线程T1,在t2执行......
  • 统一异常处理——BlockException
    五.统一异常处理—BlockException在上述规则测试中,当违反规则时,出来的异常信息页面不够友好和统一,我们可以通过设置统一的异常处理类,针对不同规则显示不同异常信息。......
  • 统一异常处理—BlockException
    五.统一异常处理—BlockException在上述规则测试中,当违反规则时,出来的异常信息页面不够友好和统一,我们可以通过设置统一的异常处理类,针对不同规则显示不同异常信息。创建一......