Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Redis Expire nie działa

Przepraszamy, ale naprawdę nie potrafię dobrze odczytać Twojego kodu, aby wiedzieć, czy/co robisz źle.

Mam sporo testów dla operacji Expire, ExpireAt, oto kilka poniżej, które mogą lepiej zademonstrować, jak z niego korzystać:

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);
}

Jeśli nadal masz problem, opublikuj fragment kodu lub jego treść, abym mógł lepiej odczytać Twój kod.

EDYCJA:Odpowiedz na przykładowy kod

Kiedy używasz klienta z wpisanym tekstem, klucz, który ostatecznie jest przechowywany w Redis, wygląda następująco:

'urn:CacheRecord:' + p_sParentKey

Który jest innym kluczem do tego, czego używasz w swoim przykładzie:

redisClient.Expire(p_sParentKey, validityPeriodInMinutes * 60);

Jest więc kilka sposobów na zdobycie klucza urn to jest używane w Redis. Jeśli masz encję, możesz użyć metody rozszerzenia ToUrn(), np.

var cacheKey = foundKey.ToUrn();

W przeciwnym razie, jeśli masz tylko „Id”, możesz utworzyć klucz urn jak:

var cacheKey = IdUtils.CreateUrn<CacheRecord>(p_sParentKey);

Stamtąd możesz wygasnąć wpis:

redisClient.Expire(cacheKey, validityPeriodInMinutes * 60);

Chociaż rozumiem, że nie jest to intuicyjne, postaram się dodać RedisTypedClient.ExpiryIn w przyszłej wersji, która zrobiłaby to automatycznie. to powinno pozwolić ci zrobić coś takiego:

cacheRecords.ExpireIn(p_sParentKey, TimeSpan.FromMinutes(validityPeriodInMinutes));

EDIT:Dodano przeciążenia metod:

Dodałem powyższą metodę w najnowszej wersji klienta Redis (v2.07), którą można pobrać tutaj:https://github.com/ServiceStack/ServiceStack.Redis/downloads

Z testami przy użyciu CacheRecord.

BTW:klient Redis tak naprawdę nie potrzebuje atrybutu [Serializer].




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Opróżnić/usunąć zestaw w Redis?

  2. Zmniejsz wynik w Redis lub usuń, jeśli 0

  3. Aktualizacja wartości Redis

  4. Dlaczego nie zaleca się używania KEYS w Redis?

  5. Klient Redis