Redis实现分布式锁

单机模式的Redis分布式锁

优缺点

实现比较轻,大多数时候能满足需求;因为是单机单实例部署,如果redis服务宕机,那么所有需要获取分布式锁的地方均无法获取锁,将全部阻塞,需要做好降级处理。

当锁过期后,执行任务的进程还没有执行完,但是锁因为自动过期已经解锁,可能被其它进程重新加锁,这就造成多个进程同时获取到了锁,这需要额外的方案来解决这种问题。

实现代码

集群模式的Redis分布式锁Redlock

优缺点

Redlock是Redis的作者antirez给出的集群模式的Redis分布式锁,它基于N个完全独立的Redis节点

部分节点宕机,依然可以保证锁的可用性

当某个节点宕机后,又立即重启了,可能会出现两个客户端同时持有同一把锁,如果节点设置了持久化,出现这种情况的几率会降低

和单机模式Redis锁相比,实现难度要大一些

实现代码

搭建redis集群

脚本执行后,出现如下日志,说明集群搭建成功

redis-cluster简单集群示例图

使用Redission构建redLock

Redis集群使用分片的方式保存键值对,redis-cluster采用slot(槽)的概念,一共16384个槽位,分布在集群中的所有master实例上。保存数据时,直接对key值做CRC16校验后得到的校验值对16384取模,将键值对存储到对应的槽位所在的实例上。

---------------------

作者:Haiyoung

原文:

版权声明:本文为博主原创文章,转载请附上博文链接!