Désolé mais je ne peux pas vraiment bien lire votre code afin de savoir si/ce que vous faites mal.
J'ai pas mal de tests pour les opérations Expire, ExpireAt, en voici quelques-uns ci-dessous qui peuvent mieux montrer comment l'utiliser :
https://github.com/ServiceStack/ServiceStack.Redis/blob/master/tests/ServiceStack.Redis.Tests/RedisClientTests.cs
[Test]
public void Can_Expire()
{
Redis.SetEntry("key", "val");
Redis.Expire("key", 1);
Assert.That(Redis.ContainsKey("key"), Is.True);
Thread.Sleep(2000);
Assert.That(Redis.ContainsKey("key"), Is.False);
}
[Test]
public void Can_ExpireAt()
{
Redis.SetEntry("key", "val");
var unixNow = DateTime.Now.ToUnixTime();
var in1Sec = unixNow + 1;
Redis.ExpireAt("key", in1Sec);
Assert.That(Redis.ContainsKey("key"), Is.True);
Thread.Sleep(2000);
Assert.That(Redis.ContainsKey("key"), Is.False);
}
Si vous rencontrez toujours un problème, pouvez-vous s'il vous plaît poster un extrait de code exécutable ou l'essentiel afin que je puisse mieux lire votre code.
EDIT :réponse à l'exemple de code
Lorsque vous utilisez un client typé, la clé qui est finalement stockée dans Redis ressemble à :
'urn:CacheRecord:' + p_sParentKey
Ce qui est une clé différente de celle que vous utilisez dans votre exemple :
redisClient.Expire(p_sParentKey, validityPeriodInMinutes * 60);
Il existe donc plusieurs façons d'obtenir la clé de l'urne qui est utilisé dans Redis. Si vous avez l'entité, vous pouvez utiliser la méthode d'extension ToUrn(), par exemple
var cacheKey = foundKey.ToUrn();
Sinon, si vous n'avez que l''Id', vous pouvez créer la clé d'urne comme :
var cacheKey = IdUtils.CreateUrn<CacheRecord>(p_sParentKey);
À partir de là, vous pouvez faire expirer votre entrée :
redisClient.Expire(cacheKey, validityPeriodInMinutes * 60);
Bien que je comprenne que ce n'est pas intuitif, je vais donc chercher à ajouter un RedisTypedClient.ExpiryIn méthode dans une future version qui le ferait automatiquement pour vous. cela devrait alors vous permettre de faire quelque chose comme :
cacheRecords.ExpireIn(p_sParentKey, TimeSpan.FromMinutes(validityPeriodInMinutes));
EDIT :surcharges de méthodes ajoutées :
J'ai ajouté la méthode ci-dessus dans la dernière version du client Redis (v2.07) que vous pouvez télécharger ici :https://github.com/ServiceStack/ServiceStack.Redis/downloads
Avec des tests utilisant votre CacheRecord.
BTW :le client Redis n'a pas réellement besoin de l'attribut [Serializer].