![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 93
普通网友
这个作者很懒,什么都没留下…
展开
-
Redisson(2-1)分布式锁实现对比 VS Java的ReentrantLock之tryLock
Redisson实现了一整套JDK中ReentrantLock的功能,这里对比一下实现的差异和核心的思想。unfair模式的tryLockReentrantLock①判断当前的state是否是0(初始状态),并用原子操作设置state,成功说明获取锁,并把当前线程设置为获取锁的线程。②如果state不是0,检查当前线程是否是持有锁的线程,如果是就按照重入语义,增加计数,当然...原创 2019-03-05 15:43:45 · 3238 阅读 · 0 评论 -
Redisson(2-2)分布式锁实现对比 VS Java的ReentrantLock之带超时时间的tryLock
Redisson实现了一整套JDK中ReentrantLock的功能,这里对比一下实现的差异和核心的思想。unfair模式的带超时时间的tryLock(超时时间)ReentrantLock这里上来会直接先试下能不能try成功,如果不成功,进入等待并开始竞争等逻辑。整个锁的核心是通过LockSupport的park方法来实现的,这是调用底层UNSAFE的park方法来实现...原创 2019-03-06 17:08:07 · 2265 阅读 · 0 评论 -
Redisson(3)CountDownLatch实现对比 VS Java的CountDownLatch
JDK的CountDownLatch的设计思路和锁类似,Java实现CountDownLatch的时候也利用了一个叫做AQS的东西,源码参照java.util.concurrent.locks.AbstractQueuedSynchronizer。这个类的其中一个思想核心是内部的一个state状态变量,这个状态会告诉你当前的锁是否可用,当前的latch是否倒计时结束等等。核心接口连个方...原创 2019-03-14 10:49:35 · 2152 阅读 · 0 评论 -
Redisson(1)分布式锁——如何解决死锁问题
Redisson是如何解决死锁问题的?普通利用Redis实现分布式锁的时候,我们可能会为某个锁指定某个key,当线程获取锁并执行完业务逻辑代码的时候,将该锁对应的key删除掉来释放锁。lock->set(key),成功->执行业务,业务执行完毕->unlock->del(key)。根据这种操作和实践方式,我们可以分为下面两个场景:1)业务机器宕机因为我们...原创 2019-03-04 16:13:16 · 18765 阅读 · 13 评论 -
Redisson(2-3)分布式锁实现对比 VS Java的ReentrantLock的FairLock
Redisson实现了一整套JDK中ReentrantLock的功能,这里对比一下公平锁(Fair)实现的差异和核心的思想。公平锁存在的意义是为了保证绝对的公平,但是有其弊端,这个在网上有很多相关的解释,就是说绝对的公平不一定是性能最高的,因此和它相对的还有非公平锁,但是费公平锁也有问题,会引发饥饿现象。具体解释也可参见https://blog.csdn.net/xxcupid/article...原创 2019-03-11 11:33:01 · 1222 阅读 · 0 评论 -
Redisson(4)分布式锁之RedLock
Redis实现分布式锁的官方文档介绍Redis的官方文档对用Redis分布式锁的难点以及解决方案的考虑做了一些说明,具体内容参见:https://redis.io/topics/distlock,译文参考:http://ifeve.com/redis-lock/场景一:保存锁的Redis的master节点挂了。这里不是说有slave就没问题了,因为Redis的数据复制功能(replic...原创 2019-03-15 15:12:10 · 1710 阅读 · 0 评论