单机Redis分布式锁原理如何解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计814个文字,预计阅读时间需要4分钟。
最近我们有个服务经常出现存储的数据重复,首先上一个系统流程图:用户通过http请求可以通知任务中心结束自己发送的任务,此时任务中心会通过MQ通知结束服务去结束任务。
最近我们有个服务经常出现存储的数据出现重复,首先上一个系统流程图:
用户通过http请求可以通知任务中心结束掉自己发送的任务,这时候任务中心会通过MQ通知结束服务去结束任务保存数据,由于任务结束数据计算保存有一定延时,所以存在用户短时间内多次结束同一个任务,这时候就会导致我们结束服务对同一个任务保存多次数据。恰好我们也是用了redis,所以对于这个问题我当时想到使用分布式锁来解决,那么如何用redis实现分布式锁呢?
首先要明确一个分布式锁应具备的原则:
互斥性。在任意时刻,只有一个客户端能持有锁;不会发生死锁。即使一个客户端持有锁的期间崩溃而没有主动释放锁,也需要保证后续其他客户端能够加锁成功;加锁和解锁必须是同一个客户端;有高可用的获取锁和释放锁功能。
由于我们只使用了单机的redis,所以本文的实现不具备第四点原则。
我们这个锁的实现就包括两点:加锁、解锁。首先看加锁。
本文共计814个文字,预计阅读时间需要4分钟。
最近我们有个服务经常出现存储的数据重复,首先上一个系统流程图:用户通过http请求可以通知任务中心结束自己发送的任务,此时任务中心会通过MQ通知结束服务去结束任务。
最近我们有个服务经常出现存储的数据出现重复,首先上一个系统流程图:
用户通过http请求可以通知任务中心结束掉自己发送的任务,这时候任务中心会通过MQ通知结束服务去结束任务保存数据,由于任务结束数据计算保存有一定延时,所以存在用户短时间内多次结束同一个任务,这时候就会导致我们结束服务对同一个任务保存多次数据。恰好我们也是用了redis,所以对于这个问题我当时想到使用分布式锁来解决,那么如何用redis实现分布式锁呢?
首先要明确一个分布式锁应具备的原则:
互斥性。在任意时刻,只有一个客户端能持有锁;不会发生死锁。即使一个客户端持有锁的期间崩溃而没有主动释放锁,也需要保证后续其他客户端能够加锁成功;加锁和解锁必须是同一个客户端;有高可用的获取锁和释放锁功能。
由于我们只使用了单机的redis,所以本文的实现不具备第四点原则。
我们这个锁的实现就包括两点:加锁、解锁。首先看加锁。

