FWQ
Redis实现分布式锁的几种方案
Redis实现分布式锁的几种方案 0浏览 收藏 欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《Redis实现分布式锁的几种方案》,这篇文章主要讲到分布式、Redis、锁等等知识,如果你对数据库相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习! 1.前言 对于Redis实现分布式锁的几种方案这个话题,展开之前我想先简单聊聊什么是分布式锁,分布式锁的使用场景,除了Redis外还有什么技术实现分布式锁等一系列内容。 1.1分布式锁 说大一点,就是在现在发展越来越迅速的大背景下,去中心化分布式系统越来越普及,在我们实际的生产开发当中,有一种不可避免的场景就是多个进程互斥的对其资源的使用,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,且保证在多进程下的数据安全,分布式锁就十分重要了。 1.2分布式锁的几种方案 方式有很多种,根据技术角度的不同 有基于MySQL的方式,通过表的唯一索引,通过insert和delete就可以实现加锁和解锁的效果; 有基于zookeeper的方式,通过创建临时有序节点,判断创建的节点序号是否最小。若是,则表示获取到锁,不是,则watch /lock目录下序号比自身小的前一个节点,解锁只需要删除节点; 有基于Redis的方式。通过执行setnx,若成功再执行expire添加过期时间的方式加锁,解锁执行delete命令。 方式有很多,不一一列举了。 1.3Redis分布式锁需要满足的条件 互斥性。在任意时刻,只有一个客户端能持有锁。 不发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁也能保证后续其他客户端能加锁。 同一性。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了,即不能误解锁。 容错性。只要大多数Redis节点正常运行,客户端就能够获取和释放锁。 2.Redis实现分布式锁的几种方案 可以通过以下方式实现(包括但不限于): SETNX + EXPIRE SETNX + value(系统时间+过期时间)…