在c#中,使用服务栈redis,基于如下url,
https://github.com/ServiceStack/ServiceStack.Redis/wiki/RedisLocks
要锁定字符串条目,使用以下方法。
RedisClient objRedisClient = new RedisClient... // redis working fine
objRedisClient.SetEntry("stringkey", "abcd");
using (objRedisClient.AcquireLock(strRedisKey))
{
objRedisClient.SetEntry("stringkey", "efdh");
}
上面的 SetEntry 代码可以很好地设置字符串值。但是当使用相同的代码锁定一个列表时,它会抛出 Redis 异常。
using (objRedisClient.AcquireLock("listkey"))
{
objRedisClient.Lists["listkey"].Push("{}");
}
Acquirelock 方法工作正常,但将新值推送到 using 语句中的列表会引发以下异常。
WRONGTYPE 对持有错误值的键的操作,sPort: 50371, LastCommand: RPUSH 97:Q {}
它只是一个简单的控制台应用程序。如果没有获取锁方法,值会成功添加到列表中。
如何在 C# 中锁定一个 redis 列表?