本文作者:kris

详细解读分布式锁原理及三种实现方式-分布式锁的实现原理

kris 2025-01-17 19:54:05 3
详细解读分布式锁原理及三种实现方式-分布式锁的实现原理摘要: 分布式锁原理?分布式锁是一种用于协调分布式系统中并发访问共享资源的机制。其原理是通过在分布式环境中的多个节点之间协作,使用共享的锁来保证对共享资源的互斥访问。常见的实现方式包括基于...

分布式锁原理?

分布式锁是一种用于协调分布式系统中并发访问共享资源的机制。其原理是通过在分布式环境中的多个节点之间协作,使用共享的锁来保证对共享资源的互斥访问。常见的实现方式包括基于数据库、缓存、ZooKeeper等。

当一个节点需要访问共享资源时,它会尝试获取锁,如果成功获取到锁,则可以执行对共享资源的操作;否则,它需要等待其他节点释放锁。当节点完成操作后,会释放锁,使得其他节点有机会获取到锁。这样就能够保证在分布式环境下对共享资源的互斥访问。

什么是分布式锁及正确使用redis实现分布式锁?

Redis分布式锁的安全性问题,在分布式系统专家和Redis的作者 antirez 之间就发生过一场争论。由于对这个问题一直以来比较关注,所以我前些日子仔细阅读了与这场争论相关的资料。这场争论的大概过程是这样的:

为了规范各家对基于Redis的分布式锁的实现,Redis的作者提出了一个更安全的实现,叫做 Redlock 。

redisson分布式锁原理讲解?

1、加锁机制

线程去获取锁,获取成功: 执行lua脚本,保存数据到redis数据库。

详细解读分布式锁原理及三种实现方式-分布式锁的实现原理

图片来源:网络

线程去获取锁,获取失败: 一直通过while循环尝试获取锁,获取成功后,执行lua脚本,保存数据到redis数据库。

2、watch dog自动延期机制

这个比较难理解,找了些许资料感觉也并没有解释的很清楚。这里我自己的理解就是:

在一个分布式环境下,假如一个线程获得锁后,突然服务器宕机了,那么这个时候在一定时间后这个锁会自动释放,你也可以设置锁的有效时间(不设置默认30秒),这样的目的主要是防止死锁的发生。

3、为啥要用lua脚本呢?

这个不用多说,主要是如果你的业务逻辑复杂的话,通过封装在lua脚本中发送给redis,而且redis是单线程的,这样就保证这段复杂业务逻辑执行的原子性 。

redissession分布式锁原理?

redission为redis官网发布的分布式解决方案,redission中包含了我们了解的常用锁的类型,基本的可重入锁,读写锁,以及CountDownLatch的设置及使用,但是他们是分布式锁,以往我们JUC提供的锁都是在单线程的线程模型中使用的,当多个进程多个线程来操作一个无锁的共享资源的时候,就会出现线程不安全的问题,就是我们多次执行后结果和单个线程执行时结果的不一致,为了让线程一致我们是需要一些处理办法的,那就是分布式锁,通过锁进行多线程的同步来进行资源隔离来实现对资源的访问控制,从而达到线程安全

分布式锁如何实现线程阻塞?

分布式锁可以通过使用底层的分布式系统组件(如ZooKeeper或Redis)来实现线程阻塞。当一个线程尝试获取分布式锁时,如果锁已被其他线程持有,该线程会被阻塞,直到锁被释放。

这种阻塞机制可以通过监听锁的状态变化或使用条件变量来实现。一旦锁被释放,被阻塞的线程会被唤醒,然后重新尝试获取锁。

这种方式确保了在分布式环境下,只有一个线程能够持有锁,其他线程会被阻塞,避免了并发冲突。

分布式锁实现线程阻塞的方式主要是利用底层的同步原语(如Java中的synchronized关键字或者ReentrantLock类),在获取锁的时候如果锁已经被其他线程占用,则会阻塞当前线程,直到锁被释放并且当前线程获取到锁为止。在分布式环境中,通常会使用一些分布式的同步机制(如ZooKeeper、Redis等)来实现分布式锁,通过这些机制可以保证同一时间只有一个客户端能够获取到锁,其他客户端会被阻塞等待锁的释放。

文章版权及转载声明

作者:kris本文地址:https://www.damoyx.com/p/24465.html发布于 2025-01-17 19:54:05
文章转载或复制请以超链接形式并注明出处大漠游侠网

阅读
分享