C# में कैशिंग: एप्लिकेशन को कैसे तेज़ करें और संसाधनों को कैसे बचाएं

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

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

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

कैशिंग प्रत्येक C# डेवलपर की सुपरपावर क्यों है

\n

कल्पना करें: आपका एप्लिकेशन हर बार शहरों की एक ही सूची या मुद्रा दर के लिए डेटाबेस में जाता है। डेटाबेस एक धीमा और महंगा संसाधन है। क्या होगा अगर हम कहें कि आप 100 मिलीसेकंड के बजाय 1 मिलीसेकंड में उपयोगकर्ता को उत्तर दे सकते हैं? हाँ, यह जादू नहीं है, बल्कि C# में उचित डेटा कैशिंग है।

\n

कैशिंग एक तकनीक है जिसमें बार-बार अनुरोधित डेटा को तेज़ स्टोरेज (आमतौर पर RAM में) में अस्थायी रूप से संग्रहीत किया जाता है। इस लेख में, हम .NET एप्लिकेशन में कैश लागू करने के तरीके पर चर्चा करेंगे, जिसमें अंतर्निहित तंत्र और बाहरी समाधान दोनों का उपयोग किया जाएगा। आप सीखेंगे कि सही रणनीति कैसे चुनें और पुराने डेटा के जाल में कैसे न फँसें।

\n\n

C# में कैशिंग के प्रकार: MemoryCache से Redis तक

\n

.NET इकोसिस्टम में कैशिंग के कई दृष्टिकोण हैं। चुनाव आपके एप्लिकेशन की आर्किटेक्चर पर निर्भर करता है: मोनोलिथ या माइक्रोसर्विसेज, एक सर्वर या क्लस्टर।

\n\n

1. अंतर्निहित MemoryCache (System.Runtime.Caching / Microsoft.Extensions.Caching.Memory)

\n

सबसे सरल और तेज़ तरीका IMemoryCache का उपयोग करना है। डेटा प्रक्रिया की RAM में संग्रहीत होता है। सिंगल-थ्रेडेड एप्लिकेशन या सरल वेबसाइटों के लिए आदर्श।

\n

ASP.NET Core में पंजीकरण और उपयोग का उदाहरण:

\n
// Program.cs में\nbuilder.Services.AddMemoryCache();\n\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<string> GetWeatherAsync(string city)\n    {\n        string cacheKey = $"weather_{city}";\n\n        // कैश से डेटा प्राप्त करने का प्रयास करें\n        if (_cache.TryGetValue(cacheKey, out string cachedData))\n        {\n            return cachedData;\n        }\n\n        // यदि डेटा नहीं है तो लोड करें (उदाहरण के लिए, API से)\n        string weatherData = await FetchWeatherFromApi(city);\n\n        // 10 मिनट के लिए कैश में सहेजें\n        var cacheEntryOptions = new MemoryCacheEntryOptions()\n            .SetAbsoluteExpiration(TimeSpan.FromMinutes(10));\n\n        _cache.Set(cacheKey, weatherData, cacheEntryOptions);\n\n        return weatherData;\n    }\n}
\n

मुख्य विधियाँ: TryGetValue, Set, Remove। समाप्ति नीतियों पर ध्यान दें: पूर्ण समय (डेटा ठीक N मिनट बाद समाप्त होगा) और स्लाइडिंग समय (डेटा तब तक जीवित रहता है जब तक उस तक पहुँचा जाता है, और अंतिम अनुरोध के बाद N मिनट तक)।

\n\n

2. वितरित कैश: IDistributedCache के माध्यम से Redis

\n

यदि आपके पास एप्लिकेशन के कई इंस्टेंस हैं (वेब फार्म, माइक्रोसर्विसेज), तो MemoryCache उपयुक्त नहीं है - प्रत्येक सर्वर अपनी प्रतिलिपि संग्रहीत करेगा। Redis मदद करता है। यह एक अलग सर्वर के रूप में काम करता है, जो सभी इंस्टेंस के लिए सामान्य है।

\n

C# में Redis कनेक्शन:

\n
// पैकेज स्थापित करें: Microsoft.Extensions.Caching.StackExchangeRedis\nbuilder.Services.AddStackExchangeRedisCache(options =>\n{\n    options.Configuration = "localhost:6379";\n    options.InstanceName = "SampleInstance";\n});\n\n// IDistributedCache के माध्यम से उपयोग\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        var cachedProduct = await _cache.GetStringAsync(cacheKey);\n\n        if (cachedProduct != null)\n        {\n            return JsonSerializer.Deserialize<Product>(cachedProduct);\n        }\n\n        var product = await FetchProductFromDb(id);\n        var serialized = JsonSerializer.Serialize(product);\n\n        await _cache.SetStringAsync(cacheKey, serialized, new DistributedCacheEntryOptions\n        {\n            AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30)\n        });\n\n                

ब्लॉग

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