分布式锁概述
分布式锁 API 构建块概述
简介
锁用于提供对资源的互斥访问。例如,您可以使用锁来:
- 提供对数据库行、表或整个数据库的独占访问
- 以顺序方式锁定从队列读取消息
任何发生更新的共享资源都可以成为锁的目标。锁通常用于改变状态的操作,而不是读取操作。
每个锁都有一个名称。应用程序决定命名锁访问的资源。通常,同一应用程序的多个实例使用此命名锁来独占访问资源并执行更新。
例如,在竞争消费者模式中,应用程序的多个实例访问一个队列。您可以决定在应用程序运行其业务逻辑时锁定队列。
在下图中,同一应用程序 App1 的两个实例使用 Redis 锁组件 对共享资源进行加锁。
- 第一个应用实例获取命名锁并获得独占访问权限。
- 第二个应用实例无法获取锁,因此不允许访问资源,直到锁被释放,要么:
- 通过 unlock API 由应用程序显式释放,或
- 由于租约超时,在一段时间后自动释放。

*此 API 目前处于 Alpha 状态。
功能
对资源的互斥访问
在任何给定时刻,只有一个应用程序实例可以持有命名锁。锁的作用域限定为 Dapr app-id。
使用租约避免死锁
Dapr 分布式锁使用基于租约的锁定机制。如果应用程序获取锁后遇到异常而无法释放锁,则锁会在一段时间后通过租约自动释放。这可以防止应用程序失败时的资源死锁。
演示
后续步骤
遵循以下指南: