![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 70
chang_ye98
初听不知曲中意,再听已是曲中人
展开
-
分布式解锁为什么需要保证原子性
解锁操作的原子性客户端 A 获取锁成功;客户端 A 访问共享资源;客户端 A 为了释放锁,先执行 GET 操作获取锁对应的随机字符串的值;客户端 A 判断随机字符串的值,与预期的值相等;客户端 A 由于某个原因阻塞了很长时间;过期时间到了,锁自动释放了;客户端 B 获取到了对应同一个资源的锁;客户端 A 从阻塞中恢复过来,执行 DEL 操纵,释放掉了客户端 B 持有的锁。如下图解决方法:使用Lua脚本进行解锁...原创 2021-09-10 10:18:01 · 502 阅读 · 0 评论 -
分布式解锁时为什么需要唯一标识
Redis客户端误“解锁” 分布式锁就那点事 分布式场景要求“锁”在某个公共的地方 在单机场景中,为了同步多线程对同一份数据的操作,我们可以利用编程语言自带的工具来构建锁。如,Java 的 synchronized 关键字、ReentrantLock 类等。对于同一服务器上的多个进程,我们可以使用操作系统级别的“锁”来实现同步。如,C# 中以 “Global\” 开头作为 Mutex 的 N...转载 2021-09-07 16:13:20 · 387 阅读 · 0 评论 -
Redis分布式锁
Redis分布式锁前言分布式锁需要注意哪些点Redis分布式锁流程加锁和解锁加锁解锁set方法前言上图所示是我们搭建的分布式环境,有三个购票项目,对应一个库存,每一个系统会有多个线程,和上文一样,对库存的修改操作加上锁,能不能保证这6个线程的线程安全呢?当然是不能的,因为每一个购票系统都有各自的JVM进程,互相独立,所以加synchronized只能保证一个系统的线程安全,并不能保证分布式的线程安全。所以需要对于三个系统都是公共的一个中间件来解决这个问题。这里我们选择Redis来作为分布式锁,多原创 2021-09-07 15:38:35 · 243 阅读 · 0 评论