C# में कैशिंग: Redis, Memcached और .NET के लिए अंतर्निहित समाधान
कैशिंग C# अनुप्रयोगों के प्रदर्शन को बढ़ाने के प्रमुख उपकरणों में से एक है। यह प्रतिक्रिया समय को कम करने, डेटाबेस और बाहरी API पर लोड को कम करने में मदद करता है। .NET पारिस्थितिकी तंत्र में कई दृष्टिकोण उपलब्ध हैं: अंतर्निहित MemoryCache से लेकर Redis और Memcached पर आधारित वितरित समाधानों तक। इस लेख में, हम प्रत्येक विकल्प का विश्लेषण करेंगे, कोड उदाहरण दिखाएंगे और चयन के लिए सिफारिशें देंगे।
1. अंतर्निहित कैशिंग: MemoryCache और IDistributedCache
.NET प्लेटफ़ॉर्म कैश के साथ काम करने के लिए दो मुख्य अमूर्त तंत्र प्रदान करता है: IMemoryCache (इन-प्रोसेस) और IDistributedCache (वितरित)।
1.1 IMemoryCache
प्रक्रिया की मेमोरी में डेटा संग्रहीत करता है। सिंगल-थ्रेडेड या मोनोलिथिक अनुप्रयोगों के लिए आदर्श जहां कई सर्वरों के बीच सिंक्रनाइज़ेशन की आवश्यकता नहीं होती है। सेटअप में सरल और बाहरी निर्भरता की आवश्यकता नहीं होती है।
// DI में जोड़ना (Program.cs)builder.Services.AddMemoryCache();
// सेवा में उपयोगpublic class WeatherService{ private readonly IMemoryCache _cache;
public WeatherService(IMemoryCache cache) { _cache = cache; }
public async Task<string> GetWeatherAsync(string city) { string cacheKey = $"weather_{city}"; if (_cache.TryGetValue(cacheKey, out string cachedData)) { return cachedData; }
// लंबे अनुरोध का अनुकरण await Task.Delay(2000); string result = $"{city} में मौसम: +25°C";
var options = new MemoryCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromMinutes(5)) .SetSlidingExpiration(TimeSpan.FromMinutes(2));
_cache.Set(cacheKey, result, options); return result; }}1.2 IDistributedCache
वितरित कैश के लिए अमूर्तता। व्यावसायिक तर्क को बदले बिना प्रदाताओं (Redis, SQL Server, NCache) के बीच आसानी से स्विच करने की अनुमति देता है। डिफ़ॉल्ट रूप से डेटा को byte[] के रूप में संग्रहीत करता है।
// पंजीकरण (Program.cs) - Redis का उपयोग करेंbuilder.Services.AddStackExchangeRedisCache(options =>{ options.Configuration = "localhost:6379";});
// उपयोगpublic class ProductService{ private readonly IDistributedCache _cache;
public ProductService(IDistributedCache cache) { _cache = cache; }
public async Task<Product> GetProductAsync(int id) { string cacheKey = $"product_{id}"; var cachedBytes = await _cache.GetAsync(cacheKey);
if (cachedBytes != null) { return JsonSerializer.Deserialize<Product>(cachedBytes); }
// DB से अनुरोध var product = await GetProductFromDb(id);
var options = new DistributedCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromHours(1));
var serialized = JsonSerializer.SerializeToUtf8Bytes(product); await _cache.SetAsync(cacheKey, serialized, options);
return product; }}2. Redis: उन्नत क्षमताओं के साथ वितरित कैश
Redis .NET में कैशिंग के लिए सबसे लोकप्रिय समाधान है। यह जटिल डेटा संरचनाओं (सूचियाँ, हैश, सेट) के समर्थन के साथ एक उच्च-प्रदर्शन इन-मेमोरी स्टोरेज के रूप में काम करता है।
2.1 स्थापना और कॉन्फ़िगरेशन
.NET से Redis कनेक्ट करने के लिए पैकेज Microsoft.Extensions.Caching.StackExchangeRedis का उपयोग करें।
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis2.2 Redis और IDistributedCache के साथ उदाहरण
बुनियादी कैशिंग के अलावा, Redis निम्नलिखित को लागू करने की अनुमति देता है:
- उपयोगकर्ता सत्र — अनुरोधों के बीच सत्र डेटा संग्रहीत करना।
- लॉक