缓存中的乐观锁定与悲观锁定
只要您的环境中存在共享资源,就需要锁定。 多个用户共享资源可能会导致数据不一致。 此类问题最好通过锁定来解决。 使用锁定机制,关键数据集变得容错,从而为用户提供原子性、一致性和隔离性。
备注
此功能也可用于 NCache Professional.
NCache 为您提供高效的锁定机制,用于由不同并行客户端更新的缓存存储中的数据同步和完整性。 NCache 内部锁定保证整个缓存集群中同一数据的每次更新的数据一致性。 此外, NCache 为您提供API来锁定特定的缓存数据,以便只有单个线程或应用程序可以更新或读取它。
何时使用锁定
问题陈述
考虑这样一个场景:两个帐户持有人使用一个唯一的银行帐户。 该账户余额为 5000 美元。 用户 1 想要从账户中提取 2000 美元,用户 2 想要向账户存入 1000 美元。 考虑到给定条件,执行这些操作后帐户余额必须为 4000 美元(5000-2000 = 3000 & 3000+1000 = 4000)。
现在让我们考虑两个用户都想同时在帐户上执行此操作,并且由于没有对该场景进行适当的处理,因此会发生以下情况:
用户1查看账户余额,显示$5000。 他提取了 2000 美元,总余额变为 3000 美元。
用户2查看账户余额,显示$5000。 他存入 1000 美元,总余额变为 6000 美元。
下图直观地描述了该场景。
解决方案
要解决此共享资源问题,您可以使用两种方法。
第一种方法是当一个用户已经对其执行任何类型的操作时,锁定银行帐户以进行任何进一步的操作。
第二种方法是使用一种机制,其中银行帐户开放供两个用户使用,但银行帐户版本会根据执行的每个操作的当前时间进行更新。 这样新版本就可以供用户操作了。
NCache 提供两种锁定机制,称为悲观锁定和乐观锁定。 它们将在后续章节中得到进一步解释。
类型:乐观锁定与悲观锁定
有两种类型的锁定可用 NCache:
悲观锁定(排他锁定)
悲观锁定是一种使用独占锁定项的机制LockHandle
因此,在锁定时,其他用户仍无法访问该项目。乐观锁定(缓存项版本控制)
乐观锁定是一种使用项目版本控制来锁定项目的机制。 使用此机制,项目可以打开供其他用户使用,但在对项目执行的每个操作中,项目版本都会自行更新。
参见
.NET: Alachisoft.NCache.运行时.缓存 命名空间。
Java的: COM。alachisoft.ncache.runtime.caching 命名空间。
节点.js: 缓存 类。
Python: ncache.runtime.caching 类。