C# में कैशिंग: Redis, Memcached और अंतर्निहित समाधान
कैशिंग आधुनिक वेब एप्लिकेशन में प्रदर्शन अनुकूलन के प्रमुख उपकरणों में से एक है। C# (.NET) इकोसिस्टम में, डेवलपर के पास अंतर्निहित तंत्र (IMemoryCache, IDistributedCache) और शक्तिशाली बाहरी समाधान (Redis, Memcached) दोनों उपलब्ध हैं। इस लेख में हम उनकी विशेषताओं का विश्लेषण करेंगे, प्रदर्शन की तुलना करेंगे और व्यावहारिक कोड उदाहरण प्रस्तुत करेंगे।
1. .NET के अंतर्निहित समाधान: IMemoryCache और IDistributedCache
ASP.NET Core कैश के साथ काम करने के लिए दो मुख्य इंटरफ़ेस प्रदान करता है: IMemoryCache (एक प्रक्रिया की मेमोरी में स्थानीय कैश) और IDistributedCache (वितरित कैश के लिए एब्स्ट्रैक्शन)।
IMemoryCache
यह मोनोलिथिक एप्लिकेशन या माइक्रोसर्विसेज के लिए आदर्श है जहां इंस्टेंस के बीच सिंक्रोनाइज़ेशन की आवश्यकता नहीं होती। कैश सर्वर की RAM में संग्रहीत होता है।
// Program.cs में रजिस्ट्रेशनbuilder.Services.AddMemoryCache();
// सर्विस में उपयोगpublic class DataService{ private readonly IMemoryCache _cache;
public DataService(IMemoryCache cache) { _cache = cache; }
public async Task<string> GetExpensiveDataAsync(int id) { string cacheKey = $"data_{id}"; if (_cache.TryGetValue(cacheKey, out string cachedData)) { return cachedData; }
// भारी ऑपरेशन का अनुकरण await Task.Delay(500); string data = $"Result for {id}";
var options = new MemoryCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromMinutes(10)) .SetSlidingExpiration(TimeSpan.FromMinutes(2));
_cache.Set(cacheKey, data, options); return data; }}IDistributedCache
यह एब्स्ट्रैक्शन एप्लिकेशन कोड को बदले बिना विभिन्न बैकएंड (Redis, SQL Server, NCache) को कनेक्ट करने की अनुमति देता है। इसे AddDistributedRedisCache या AddDistributedSqlServerCache के माध्यम से रजिस्टर किया जाता है।
// Redis के साथ उदाहरणbuilder.Services.AddStackExchangeRedisCache(options =>{ options.Configuration = "localhost:6379"; options.InstanceName = "SampleInstance";});
// उपयोगpublic class DistributedService{ private readonly IDistributedCache _cache;
public DistributedService(IDistributedCache cache) { _cache = cache; }
public async Task<string> GetDataAsync(string key) { var cached = await _cache.GetStringAsync(key); if (cached != null) return cached;
var data = $"Computed at {DateTime.Now}"; await _cache.SetStringAsync(key, data, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5) }); return data; }}2. Redis: C# के लिए शक्तिशाली वितरित कैश
Redis एक in-memory डेटा स्टोर है जो जटिल संरचनाओं (लिस्ट, सेट, हैश) का समर्थन करता है। .NET के लिए क्लाइंट StackExchange.Redis या उच्च-स्तरीय रैपर Microsoft.Extensions.Caching.StackExchangeRedis का उपयोग किया जाता है।
C# में Redis के लाभ:
- गति: सबमिलीसेकंड विलंबता (औसतन 0.5-1 ms)।
- Pub/Sub: कैश बदलने पर अन्य सेवाओं को सूचित कर सकते हैं।
- स्थायित्व: डेटा डिस्क पर सहेजा जा सकता है (RDB/AOF)।
- क्लस्टरिंग: आउट-ऑफ-द-बॉक्स क्षैतिज स्केलिंग।
JSON सीरियलाइज़ेशन के साथ उन्नत उपयोग का उदाहरण:
using StackExchange.Redis;using System.Text.Json;
public class RedisCacheService{ private readonly IDatabase _db; private readonly ConnectionMultiplexer _redis;
public RedisCacheService(string connectionString) { _redis = ConnectionMultiplexer.Connect(connectionStri
```