PHP如何利用Redis实现分布式锁避免高并发下的重复请求问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计855个文字,预计阅读时间需要4分钟。
需求:首先设定一个系统验证的序列:(A渠道系统,业务B系统,外部厂商C系统)。(1)业务系统调用渠道系统,验证传入的手机、身份、姓名三项要素是否一致。 (2)渠道系统再调用外部系统。
需求:
我们先举个某系统验证的列子:(A渠道系统,业务B系统,外部厂商C系统)
(1)B业务系统调用A渠道系统,验证传入的手机、身份证、姓名三要素是否一致。
(2)A渠道系统再调用外部厂商C系统。
(3)A渠道系统将结果返回给B业务系统。
这3个过程中,(2)过程,调用外部厂商是需要计费的。
当B业务系统并发量很高时,有100笔相同的三要素校验,由于是相同的三要素,A渠道只要调用一次厂商即可知道结果。为了防止在某一请求还没响应结束的同时,其他请求也去调用外部系统,这个时候就需要加锁处理
分布式锁的特点
● 原子性:同一时刻,只能有一个机器的一个线程得到锁;
● 可重入性:同一对象(如线程、类)可以重复、递归调用该锁而不发生死锁;
● 可阻塞:在没有获得锁之前,只能阻塞等待直至获得锁;
● 高可用:哪怕发生程序故障、机器损坏,锁仍然能够得到被获取、被释放;
● 高性能:获取、释放锁的操作消耗小。
本文共计855个文字,预计阅读时间需要4分钟。
需求:首先设定一个系统验证的序列:(A渠道系统,业务B系统,外部厂商C系统)。(1)业务系统调用渠道系统,验证传入的手机、身份、姓名三项要素是否一致。 (2)渠道系统再调用外部系统。
需求:
我们先举个某系统验证的列子:(A渠道系统,业务B系统,外部厂商C系统)
(1)B业务系统调用A渠道系统,验证传入的手机、身份证、姓名三要素是否一致。
(2)A渠道系统再调用外部厂商C系统。
(3)A渠道系统将结果返回给B业务系统。
这3个过程中,(2)过程,调用外部厂商是需要计费的。
当B业务系统并发量很高时,有100笔相同的三要素校验,由于是相同的三要素,A渠道只要调用一次厂商即可知道结果。为了防止在某一请求还没响应结束的同时,其他请求也去调用外部系统,这个时候就需要加锁处理
分布式锁的特点
● 原子性:同一时刻,只能有一个机器的一个线程得到锁;
● 可重入性:同一对象(如线程、类)可以重复、递归调用该锁而不发生死锁;
● 可阻塞:在没有获得锁之前,只能阻塞等待直至获得锁;
● 高可用:哪怕发生程序故障、机器损坏,锁仍然能够得到被获取、被释放;
● 高性能:获取、释放锁的操作消耗小。

