C# में कैशिंग: Redis, Memcached और अंतर्निहित समाधान A से Z तक

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

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

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

C# में कैशिंग: Redis, Memcached और अंतर्निहित समाधान — पूरी गाइड

\n\n

आधुनिक वेब डेवलपमेंट में, एप्लिकेशन का प्रदर्शन सफलता के प्रमुख कारकों में से एक है। कैशिंग डेटाबेस पर लोड को काफी कम करने और सिस्टम की प्रतिक्रिया को गति देने में मदद करता है। C# (.NET) इकोसिस्टम में, डेवलपर के पास तीन मुख्य दृष्टिकोण उपलब्ध हैं: मेमोरी में अंतर्निहित कैशिंग (IMemoryCache), वितरित समाधान (IDistributedCache), और बाहरी कैशिंग सर्वर जैसे Redis और Memcached। इस लेख में, हम सिद्धांत से लेकर व्यावहारिक कोड उदाहरणों तक, इनमें से प्रत्येक का विश्लेषण करेंगे।

\n\n

1. .NET में अंतर्निहित कैशिंग: IMemoryCache

\n\n

अंतर्निहित कैशिंग डेटा को अस्थायी रूप से संग्रहीत करने का सबसे सरल और तेज़ तरीका है। ASP.NET Core में, इसे IMemoryCache इंटरफ़ेस के माध्यम से कार्यान्वित किया जाता है। डेटा एक प्रक्रिया की RAM में संग्रहीत होता है, जो न्यूनतम विलंबता सुनिश्चित करता है।

\n\n

कब उपयोग करें:

\n
    \n
  • डेटा को कई सर्वरों के बीच सिंक्रोनाइज़ करने की आवश्यकता नहीं है।
  • \n
  • कैश किए जाने वाले डेटा की मात्रा कम है।
  • \n
  • बाहरी सेवाओं को कॉन्फ़िगर किए बिना अधिकतम प्रदर्शन की आवश्यकता है।
  • \n
\n\n

कार्यान्वयन उदाहरण:

\n
using Microsoft.Extensions.Caching.Memory;\n\npublic class WeatherService\n{\n    private readonly IMemoryCache _cache;\n\n    public WeatherService(IMemoryCache cache)\n    {\n        _cache = cache;\n    }\n\n    public async Task<WeatherData> GetWeatherAsync(string city)\n    {\n        string cacheKey = $"weather_{city}";\n\n        if (!_cache.TryGetValue(cacheKey, out WeatherData data))\n        {\n            // कैश में डेटा नहीं है — बाहरी स्रोत से लोड करें\n            data = await FetchWeatherFromApi(city);\n\n            // कैश सेटिंग: 5 मिनट की जीवन अवधि\n            var cacheOptions = new MemoryCacheEntryOptions()\n                .SetAbsoluteExpiration(TimeSpan.FromMinutes(5));\n\n            _cache.Set(cacheKey, data, cacheOptions);\n        }\n\n        return data;\n    }\n\n    private async Task<WeatherData> FetchWeatherFromApi(string city)\n    {\n        // बाहरी API कॉल का अनुकरण\n        await Task.Delay(1000);\n        return new WeatherData { City = city, Temperature = 22.5 };\n    }\n}\n\npublic class WeatherData\n{\n    public string City { get; set; }\n    public double Temperature { get; set; }\n}
\n\n

मुख्य विधियाँ: TryGetValue, Set, Remove। यह याद रखना महत्वपूर्ण है कि IMemoryCache माइक्रोसर्विस आर्किटेक्चर के लिए उपयुक्त नहीं है।

\n\n

2. वितरित कैशिंग: IDistributedCache और इसके प्रदाता

\n\n

कई सर्वरों पर चलने वाले एप्लिकेशन के लिए, वितरित कैशिंग आवश्यक है। .NET में, इसे IDistributedCache इंटरफ़ेस के माध्यम से सारगर्भित किया गया है। यह बिज़नेस लॉजिक को बदले बिना प्रदाता (Redis, SQL Server, NCache) को आसानी से बदलने की अनुमति देता है।

\n\n

मुख्य विधियाँ:

\n
    \n
  • GetAsync / SetAsync — बाइट्स के साथ काम करने के लिए।
  • \n
  • GetStringAsync / SetStringAsync — स्ट्रिंग डेटा के लिए।
  • \n
  • RefreshAsync — स्लाइडिंग एक्सपायरी टाइमर को रीसेट करना।
  • \n
  • RemoveAsync — एंट्री को हटाना।
  • \n
\n\n

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

\n
// Program.cs में प्रदाता को रजिस्टर करें\nbuilder.Services.AddStackExchangeRedisCache(options =>\n{\n    options.Configuration = "localhost:6379";\n    options.InstanceName = "SampleApp";\n});\n\n// सेवा में उपयोग\npublic class ProductService\n{\n    private readonly IDistributedCache _cache;\n\n    public ProductService(IDistributedCache cache)\n    {\n        _cache = cache;\n    }\n\n    public async Task<Product> GetProductAsync(int id)\n    {\n        string cacheKey = $"product_{id}";\n        string cachedData = await _cache.GetStringAsync(cacheKey);\n\n        if                

ब्लॉग

पुस्तक अनुशंसाएँ