分布式锁

一、分布式锁概述

1.为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。

2.分布式锁的实现方式

  基于数据库实现

  基于Redis实现

  基于ZooKeeper实现

二、Redis实现分布式锁

1.分布式锁场景。秒杀、抢优惠券

2.redis单线程模型

三、Redis分布式锁问题

  1. 锁的超时问题

        问题讲解:

        虽然上面给锁加上了超时时间,但是客户端并不能一定在超时时间之内完成定时任务,所以,即使当前客户端没有完成任务,此时又会有其他的客户端设置锁成功,此时同一资源将会面临多个客户端同时操作的问题。

        解决方案:

        客户端可以在锁设置成功之后,进行定时任务,在锁超时之前使用lua脚本删除锁并重新设置锁和超时时间。

        当然,这里为什么会使用lua来完成操作呢,其实和上面的原子性问题一样,在删除锁和重新设置锁和锁的超时时间之间,可能面临其他的客户端将锁资源占有,而lua具有原子性的特性,删除锁和重新加锁这两个操作要么都完成,要么都不完成。

 

 

 

 

 

原文地址:https://www.cnblogs.com/wenxiangchen/p/11449434.html