锁用于确保资源的互斥访问。例如,您可以使用锁来:
任何需要更新的共享资源都可以被锁定。锁通常用于改变状态的操作,而不是读取操作。
每个锁都有一个名称。应用程序决定锁定哪些资源。通常,同一应用程序的多个实例使用这个命名锁来独占访问资源并进行更新。
例如,在竞争消费者模式中,应用程序的多个实例访问一个队列。您可以选择在应用程序执行其业务逻辑时锁定队列。
在下图中,同一应用程序的两个实例,App1
,使用Redis锁组件来锁定共享资源。
*此API目前处于Alpha
状态。
在任何给定时刻,只有一个应用程序实例可以持有命名锁。锁的范围限定在Dapr应用程序ID内。
Dapr分布式锁使用基于租约的锁定机制。如果应用程序获取锁后遇到异常,无法释放锁,则锁将在一段时间后通过租约自动释放。这防止了在应用程序故障时发生资源死锁。