Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

रेडिस एक्सपायर काम नहीं करता

क्षमा करें, लेकिन यह जानने के लिए कि क्या/आप क्या गलत कर रहे हैं, मैं वास्तव में आपका कोड अच्छी तरह से नहीं पढ़ सकता।

एक्सपायर, एक्सपायरएट ऑपरेशंस के लिए मेरे पास कुछ उचित परीक्षण हैं, यहां कुछ नीचे दिए गए हैं जो इसे बेहतर तरीके से प्रदर्शित कर सकते हैं:

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

यदि आपको अभी भी कोई समस्या हो रही है, तो क्या आप कृपया एक रन करने योग्य कोड स्निपेट या सार पोस्ट कर सकते हैं ताकि मैं आपका कोड बेहतर ढंग से पढ़ सकूं।

संपादित करें:कोड उदाहरण का उत्तर

जब आप टाइप किए गए क्लाइंट का उपयोग करते हैं, तो रेडिस में संग्रहीत होने वाली कुंजी इस तरह दिखती है:

'urn:CacheRecord:' + p_sParentKey

आप अपने उदाहरण में जो उपयोग कर रहे हैं, उससे भिन्न कुंजी कौन-सी है:

redisClient.Expire(p_sParentKey, validityPeriodInMinutes * 60);

तो कलश कुंजी . प्राप्त करने के कुछ तरीके हैं जिसका उपयोग रेडिस में किया जाता है। यदि आपके पास इकाई है तो आप ToUrn() एक्सटेंशन विधि का उपयोग कर सकते हैं, उदा.

var cacheKey = foundKey.ToUrn();

अन्यथा यदि आपके पास केवल 'Id' है, तो आप कलश कुंजी . बना सकते हैं जैसे:

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

वहां से आप अपनी प्रविष्टि समाप्त कर सकते हैं:

redisClient.Expire(cacheKey, validityPeriodInMinutes * 60);

हालांकि मैं समझता हूं कि यह कैसे सहज ज्ञान युक्त नहीं है, इसलिए मैं एक RedisTypedClient.ExpiryIn जोड़ना चाहूंगा। भविष्य के संस्करण में विधि जो आपके लिए स्वचालित रूप से ऐसा करेगी। इसके बाद आपको कुछ ऐसा करने देना चाहिए:

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

संपादित करें:जोड़ा गया विधि अधिभार:

मैंने रेडिस क्लाइंट (v2.07) के नवीनतम संस्करण में उपरोक्त विधि को जोड़ा है जिसे आप यहां डाउनलोड कर सकते हैं:https://github.com/ServiceStack/ServiceStack.Redis/downloads

अपने CacheRecord का उपयोग करके परीक्षणों के साथ।

बीटीडब्ल्यू:रेडिस क्लाइंट को वास्तव में [सीरियलाइज़र] विशेषता की आवश्यकता नहीं होती है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस में एकाधिक कुंजी की समाप्ति कैसे सेट करें

  2. फ़ाइल या असेंबली लोड नहीं कर सका System.Runtime.CompilerServices.Unsafe

  3. नोड का उपयोग करके रेडिस में बाइनरी ऑब्जेक्ट को कैसे स्टोर करें?

  4. रेडिस में HSET चाइल्ड कुंजी को कैसे समाप्त करें?

  5. अजवाइन श्रमिकों के लिए गपशप, मिलना-जुलना और दिल की धड़कन को अक्षम करने के क्या परिणाम हैं?