【发布时间】:2013-02-05 14:18:54
【问题描述】:
在更新和获取这样的键/值时,我正在使用 ServiceStack Redis 中的 AcquireLock 方法:
public virtual void Set(string key, T entity)
{
using (var client = ClientManager.GetClient())
{
using (client.AcquireLock(key + ":locked", DefaultLockingTimeout, DefaultLockExpire))
{
client.Set(key, entity);
}
}
}
我已经扩展了 AcqurieLock 方法来接受额外的参数用于锁定密钥的到期。所以我想知道我是否需要AcquireLock?我的班级在 Get、GetAll、ExpireAt、SetAll 等每个操作中都使用 AcquireLock。
但这种方法并非每次都有效。例如,如果锁中的操作抛出异常,则密钥保持锁定状态。对于这种情况,我在 AcquireLock 方法中添加了 DefaultLockExpire 参数以使“锁定”密钥过期。
有没有更好的解决方案,或者我们什么时候需要获取锁,比如多线程编程中的“锁”块。
【问题讨论】:
标签: locking timeout redis servicestack