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
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!


