分布式锁解决方案都有哪些?
一提到分布式,不管是网上的文章,还是一起群友,都是说使用Redis来实现分布式锁。除了使用Redis,一般在大型项目中都会使用哪些技术来实现分布式锁呢?其中都有哪些优缺点呢?
平常大家使用Redis实现分布式锁,是如何保证高可用的?使用官方的RedLock?
分布式锁是用于在分布式系统中实现互斥访问共享资源的一种机制。以下是几种常见的分布式锁的实现方案:
基于数据库:使用数据库的唯一性约束或乐观锁机制来实现分布式锁。每个节点尝试在数据库中创建一个特定的唯一标识符(例如表的行或键值对),成功创建则表示获取到锁,失败则表示锁已经被其他节点获取。
基于缓存:使用分布式缓存(如Redis、Memcached)来实现分布式锁。通过在缓存中设置一个特定的键值对来表示锁的状态,节点在获取锁时尝试在缓存中创建该键值对,成功创建则表示获取到锁,其他节点在此时尝试获取锁时则会失败。
基于ZooKeeper:ZooKeeper是一个高性能的分布式协调服务,可用于实现分布式锁。通过创建临时有序节点,节点谁创建节点成功,则表示获取到锁,其他节点按顺序排队等待锁的释放。
基于信号量:使用分布式信号量来实现分布式锁。如使用ZooKeeper的分布式信号量实现,每个节点尝试申请信号量,成功则表示获取到锁,失败则表示锁已经被其他节点获取。
这些实现方案各有优缺点,应根据具体需求和系统环境选择适合的方案。同时,分布式锁的实现需要考虑并发性、可重入性、死锁等问题,确保锁的正确性和性能。
我觉得 RedLock 是个伪概念
就我知道的有三种:
实现和机制不同
基于redis 基本都是redlock实现的 这个问题就是需要看你追求的 cap模型 redis redllock 是cp模型