以下のようなコードを想像してみてください...
using (var transaction = this.redisClient.CreateTransaction())
{
transaction.QueueCommand(client => client.As<MyPoco>().StoreAsHash(myPocoInstance));
transaction.QueueCommand(client => client.As<MyPoco>().ExpireAt(id, timeout));
transaction.Commit();
}
myPoco を redis 内のハッシュとして保存しています。この段階で、redis のすべてのキーを見ると、次のように表示されます...
ids:MyPoco
urn:mypoco:12345
つまり、urn:mypoco:12345にはハッシュとして保存された myPocoInstance が含まれ、ids:MyPocoには redis に保存された MyPoco の各インスタンスへの一連のポインターが含まれます (この時点では 12345 の単一の値)。これは、有効期限が切れるまで問題ありません。urn:mypoco:12345の有効期限が切れるとすぐに、そのハッシュは redis から消えますが、ids:MyPocoは 12345 エントリがなくなったことを反映するように更新されることはありません。したがって、時間が経つにつれて、ids:MyPocoは成長し続けます。
これを回避する方法はありますか?TypedClients で有効期限を使用するのはおそらく良い考えではないように思えます。これを回避する唯一の方法は、ハッシュをまったく使用せず、代わりに poco のすべての個々のフィールドを個別の redis エントリとして保存することですが、これは理想的ではありません。
明らかな何かを見落としていることを願っています。