写点什么

Redis 入门七:分布式锁

用户头像
打工人!
关注
发布于: 36 分钟前
Redis入门七:分布式锁

主要内容:

本篇主要介绍分分布式锁,以及一些注意事项

分布式锁:

为什么要有分布式锁呢?

随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的 Java API 并不能提供分布式锁的能力。为了解决这个问题就需要一种跨 JVM 的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题!

如何操作:

redis 加锁:setnx key,加了锁之后,不能再对其进行操作,释放后,别人才可以对其进行操作

释放锁:del key

设置锁的过期时间:expire

小贴士:如果加上锁之后出现了故障,那就一直锁在那了,过期时间也无法设置了,怎么办?

我们在设置锁的时候直接也在后面设置过期时间:set key 10 nx ex 12

可能出现的问题:

A 服务器卡顿了,操作时间比过期时间还长,锁被释放了,这个时候 B 抢住了,正好 A 服务器反应过来了,接着进行操作,完成操作之后,就把 B 的锁给释放了。释放了被人的锁怎么能行呢。

解决方案:

加上 uuid 标识,释放时先判断当前的 uuid 和要释放的 uuid 是否一样。

但是即时有了 uuid 来进行判别,还是会出现释放别人锁的情况:因为缺原子性。

举个例子:a 操作上锁,操作,释放,在释放的时候会判断 uuid,判断结果是一样的,然后他又接着进行删除操作,正要删除时,过期时间到了,锁被自动释放了,然后被 b 给抢走了,b 进行上锁,操作,这时 a 删除操作完成了,就要释放锁,这时释放的就是 b 上的锁了。

发布于: 36 分钟前阅读数: 2
用户头像

打工人!

关注

打工人! 2019.11.10 加入

InfoQ年度最佳内容获得者。 InfoQ签约作者 本人打工人一枚,自动化和控制专业入坑人一枚。目前在研究深度强化学习(DRL)技术。准备入坑互联网小白一枚。喜欢了解科技前沿技术,喜欢拍照。

评论

发布
暂无评论
Redis入门七:分布式锁