C# (.NET) में कैशिंग: Redis, MemoryCache और अन्य समाधान

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# (.NET) में कैशिंग: Redis, MemoryCache और अन्य उपकरण



C# (.NET) में आधुनिक उच्च-लोड अनुप्रयोगों में, कैशिंग प्रदर्शन बढ़ाने और डेटाबेस पर लोड कम करने के प्रमुख तंत्रों में से एक है। इस लेख में, हम .NET इकोसिस्टम में कैशिंग के मुख्य उपकरणों पर विस्तार से चर्चा करेंगे: अंतर्निहित MemoryCache, StackExchange.Redis लाइब्रेरी के माध्यम से Redis पर आधारित वितरित कैश, और IDistributedCache एब्स्ट्रैक्शन।



1. अंतर्निहित कैशिंग: MemoryCache



MemoryCache (नेमस्पेस Microsoft.Extensions.Caching.Memory) प्रक्रिया की RAM में सीधे डेटा कैश करने का सबसे सरल तरीका है। यह एकल-प्रक्रिया अनुप्रयोगों (जैसे, बिना स्केलिंग के ASP.NET Core) के लिए आदर्श है।



बुनियादी उपयोग का उदाहरण:



using Microsoft.Extensions.Caching.Memory;

// कैश बनानाIMemoryCache cache = new MemoryCache(new MemoryCacheOptions());

// 5 मिनट की लाइफटाइम के साथ कैश में लिखनाcache.Set("user:123", new User { Id = 123, Name = "इवान" }, TimeSpan.FromMinutes(5));

// कैश से पढ़नाif (cache.TryGetValue("user:123", out User user)){ Console.WriteLine($"उपयोगकर्ता: {user.Name}");}else{ Console.WriteLine("कैश खाली है, DB से लोड कर रहे हैं...");}


लाभ: अधिकतम गति, शून्य नेटवर्क विलंबता, सेटअप में सरलता।
नुकसान: डेटा केवल एक प्रक्रिया में रहता है, एप्लिकेशन पुनरारंभ होने पर खो जाता है।



2. वितरित कैशिंग: Redis + StackExchange.Redis



वितरित सिस्टम (एकाधिक सर्वर, माइक्रोसर्विसेज) के लिए बाहरी कैश आवश्यक है। Redis सबसे लोकप्रिय विकल्प है। .NET में Redis के साथ काम करने के लिए मुख्य लाइब्रेरी StackExchange.Redis है (GitHub पर 6 हजार से अधिक स्टार्स)।



इंस्टॉलेशन:



dotnet add package StackExchange.Redis


Redis के साथ काम करने का उदाहरण:



using StackExchange.Redis;

// Redis से कनेक्शनConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");IDatabase db = redis.GetDatabase();

// TTL (लाइफटाइम) के साथ स्ट्रिंग लिखनाdb.StringSet("session:token123", "user_data_here", TimeSpan.FromHours(1));

// पढ़नाstring data = db.StringGet("session:token123");if (!string.IsNullOrEmpty(data)){ Console.WriteLine($"कैश से डेटा: {data}");}

// जटिल ऑब्जेक्ट्स को कैश करना (JSON में सीरियलाइज़ेशन)var product = new Product { Id = 1, Name = "लैपटॉप", Price = 75000 };string json = System.Text.Json.JsonSerializer.Serialize(product);db.StringSet("product:1", json, TimeSpan.FromMinutes(10));

// पढ़ते समय डी-सीरियलाइज़ेशनstring cachedJson = db.StringGet("product:1");var cachedProduct = System.Text.Json.JsonSerializer.Deserialize<Product>(cachedJson);


Redis की अतिरिक्त क्षमताएं:

  • हैशेज़ (Hashes) — फ़ील्ड वाले ऑब्जेक्ट्स को स्टोर करने के लिए (जैसे, उपयोगकर्ता प्रोफ़ाइल)।
  • सूचियाँ और सेट — कतारों, रेटिंग्स के लिए।
  • Pub/Sub — कैश इनवैलिडेशन नोटिफिकेशन के लिए।
  • Lua स्क्रिप्ट्स — एटॉमिक ऑपरेशन्स।


3. IDistributedCache एब्स्ट्रैक्शन



Microsoft इंटरफ़ेस IDistributedCache (पैकेज Microsoft.Extensions.Caching.Abstractions) प्रदान करता है, जो एप्लिकेशन कोड को बदले बिना विभिन्न कैश इम्प्लीमेंटेशन के बीच स्विच करने की अनुमति देता है।



इम्प्लीमेंटेशन:

  • MemoryDistributedCache — डेवलपमेंट और टेस्टिंग के लिए (मेमोरी में स्टोर करता है)।
  • RedisCache (पैकेज Microsoft.Extensions.Caching.StackExchangeRedis) — प्रोडक्शन के लिए।
  • SqlServerCache

अनुशंसाएँ