想象一些类似下面的代码......
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 条目 - 但这并不理想。
我希望我错过了一些明显的东西。