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 Exception がスローされます。
using (objRedisClient.AcquireLock("listkey"))
{
objRedisClient.Lists["listkey"].Push("{}");
}
Acquirelock メソッドは正常に動作しますが、新しい値を using ステートメント内のリストにプッシュすると、次の例外がスローされます。
間違った種類の値を保持するキーに対する WRONGTYPE 操作、sPort: 50371、LastCommand: RPUSH 97:Q {}
これは単純なコンソール アプリケーションです。取得ロック メソッドがないと、値がリストに正常に追加されます。
c#でredisリストをロックするには?