Redis第三讲:分布式锁的三种实现方法
1、为什么需要锁?
因为我们想让同一时刻只有一个线程在执行某段代码。
-
因为如果同时出现多个线程去执行,可能会带来我们不想要的结果,可能是数据错误,也可能是服务宕机等等。
-
以淘宝双11为例,在0点这一刻,如果有几十万甚至上百万的人同时去查看某个商品详情页,这时候会触发商品的查询,如果我们不做控制,全部走到数据库去,那是有可能直接将数据库打垮的。
-
这个时候一个比较常用的做法就是进行加锁,只让1个线程去查询,其他线程等待这个线程的查询结果后,直接拿结果。在这个例子中,锁用于控制访问数据库的流量,最终起到了保护系统的作用。
-
再举个例子,某平台做活动“秒杀茅台”,假如活动只秒杀1瓶,但是同时有10万人在同一时刻去抢,如果底层不做控制,有10000个人抢到了,额外的9999瓶平台就要自己想办法解决了。此时,我们可以在底层通过加锁或者隐式加锁的方式来解决这个问题。
-
此外,锁也经常用来解决并发下的数据安全方面的问题。
2、为什么需要分布式锁?
2.1、分布式锁是锁的一种,通常用来跟 JVM 锁做区别。
-
应用开发时,如果需要在同进程内的不同线程并发访问某项资源&