C# (.NET) में कैशिंग: Redis, MemoryCache और विकल्प
\nकैशिंग C# (.NET) अनुप्रयोगों के प्रदर्शन को बढ़ाने के लिए प्रमुख उपकरणों में से एक है। यह प्रतिक्रिया समय को कम करने, डेटाबेस पर लोड को कम करने और बुनियादी ढांचे की लागत को कम करने में मदद करता है। इस लेख में, हम .NET के अंतर्निहित तंत्र, Redis पर आधारित लोकप्रिय कार्यान्वयन, साथ ही NCache और Couchbase जैसे वैकल्पिक समाधानों का विश्लेषण करेंगे।
\n\n1. अंतर्निहित कैशिंग: MemoryCache
\nMemoryCache (नेमस्पेस Microsoft.Extensions.Caching.Memory) एक सरल और तेज़ कैश है जो एक प्रक्रिया की RAM में डेटा संग्रहीत करता है। यह सिंगल-थ्रेडेड अनुप्रयोगों या एक इंस्टेंस वाले वेब सर्वर के लिए आदर्श है।
स्थापना और कनेक्शन
\ndotnet add package Microsoft.Extensions.Caching.Memory\n\nबुनियादी उपयोग का उदाहरण
\nusing Microsoft.Extensions.Caching.Memory;\n\npublic class DataService\n{\n private readonly IMemoryCache _cache;\n private readonly TimeSpan _cacheDuration = TimeSpan.FromMinutes(5);\n\n public DataService(IMemoryCache cache) => _cache = cache;\n\n public async Task<string> GetDataAsync(string key)\n {\n if (!_cache.TryGetValue(key, out string cachedData))\n {\n cachedData = await FetchFromDatabaseAsync(key);\n _cache.Set(key, cachedData, new MemoryCacheEntryOptions\n {\n AbsoluteExpirationRelativeToNow = _cacheDuration\n });\n }\n return cachedData;\n }\n}\n\nलाभ और हानियाँ
\n- \n
- + सरलता, शून्य नेटवर्क विलंबता। \n
- + समाप्ति समर्थन (निरपेक्ष/स्लाइडिंग) अंतर्निहित है। \n
- - कई सर्वरों पर स्केलिंग करने पर काम नहीं करता। \n
- - एप्लिकेशन पुनरारंभ होने पर कैश साफ़ हो जाता है। \n
2. वितरित कैशिंग: Redis
\nRedis .NET इकोसिस्टम में वितरित कैशिंग के लिए सबसे लोकप्रिय विकल्प है। यह एक अलग सेवा के रूप में काम करता है, जो एप्लिकेशन के सभी इंस्टेंस के लिए उपलब्ध है। .NET में IDistributedCache एब्स्ट्रैक्शन का उपयोग किया जाता है।
पैकेज स्थापना
\ndotnet add package Microsoft.Extensions.Caching.StackExchangeRedis\n\nProgram.cs में कॉन्फ़िगरेशन
\nbuilder.Services.AddStackExchangeRedisCache(options =>\n{\n options.Configuration = "localhost:6379";\n options.InstanceName = "MyAppCache";\n});\n\nIDistributedCache के साथ काम करने का उदाहरण
\npublic class RedisCacheService\n{\n private readonly IDistributedCache _cache;\n\n public RedisCacheService(IDistributedCache cache) => _cache = cache;\n\n public async Task SetAsync(string key, byte[] data, int minutes = 10)\n {\n await _cache.SetAsync(key, data, new DistributedCacheEntryOptions\n {\n AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(minutes)\n });\n }\n\n public async Task<byte[]> GetAsync(string key)\n {\n return await _cache.GetAsync(key);\n }\n}\n\nRedis की उन्नत क्षमताएँ
\n- \n
- ऑब्जेक्ट सीरियलाइज़ेशन:
System.Text.JsonयाNewtonsoft.Jsonका उपयोग करें। \n - टैग द्वारा इनवैलिडेशन: तृतीय-पक्ष लाइब्रेरीज़ (जैसे,
EasyCaching.Redis) रिकॉर्ड को समूहित करने की अनुमति देती हैं। \n - Pub/Sub: कैश परिवर्तनों की सूचनाओं के लिए। \n
3. Redis के विकल्प
\n\n3.1 NCache
\nNCache एक वाणिज्यिक समाधान है (मुफ़्त संस्करण उपलब्ध है) जो .NET का समर्थन करता है। यह उन्नत क्षमताएँ प्रदान करता है: नोड्स के बीच सिंक्रोनाइज़ेशन, कैश के लिए SQL-जैसी क्वेरी, ASP.NET सत्र कैशिंग।
\n- \n
- +
IDist