स्विफ्ट में कैशिंग: Redis, Memcached और अंतर्निहित समाधान: A से Z तक
कैशिंग iOS और macOS अनुप्रयोगों में प्रदर्शन अनुकूलन की प्रमुख रणनीतियों में से एक है। इस लेख में, हम विस्तार से जानेंगे कि स्विफ्ट में कैशिंग कैसे व्यवस्थित करें: अंतर्निहित NSCache से लेकर Redis और Memcached जैसी बाहरी प्रणालियों के साथ कार्य करने तक। आप जानेंगे कि कब कौन सा उपकरण चुनना है, और प्रत्येक दृष्टिकोण के लिए तैयार कोड उदाहरण प्राप्त करेंगे।
स्विफ्ट अनुप्रयोगों में कैशिंग की आवश्यकता क्यों है?
कोई भी एप्लिकेशन जो नेटवर्क अनुरोधों, डेटाबेस या भारी गणनाओं के साथ काम करता है, कैशिंग से लाभ उठा सकता है। मुख्य लाभ:
- गति: कैश से डेटा मिलीसेकंड में वापस आता है, नेटवर्क या डिस्क पर देरी के बिना।
- ट्रैफ़िक की बचत: सर्वर पर कम अनुरोध - उपयोगकर्ता और सर्वर के लिए कम खर्च।
- ऑफ़लाइन पहुंच: सही कार्यान्वयन के साथ, कुछ कार्यक्षमता इंटरनेट के बिना काम करती है।
- सर्वर पर लोड कम करना: विशेष रूप से सर्वर-साइड स्विफ्ट समाधानों (Vapor, Kitura) के लिए प्रासंगिक।
अंतर्निहित समाधान: NSCache और URLCache
NSCache — मेमोरी में हल्का कैशिंग
NSCache Foundation में एक अंतर्निहित वर्ग है जो "कुंजी-मान" जोड़ियों के अस्थायी भंडारण के लिए है। यह मेमोरी की कमी होने पर स्वचालित रूप से ऑब्जेक्ट्स को हटा देता है, जो इसे छवियों, JSON प्रतिक्रियाओं और अन्य गैर-महत्वपूर्ण डेटा को कैश करने के लिए आदर्श बनाता है।
import Foundation
class ImageCacheManager { static let shared = ImageCacheManager() private let cache = NSCache<NSString, NSData>() func setImageData(_ data: Data, forKey key: String) { cache.setObject(data as NSData, forKey: key as NSString) } func getImageData(forKey key: String) -> Data? { return cache.object(forKey: key as NSString) as Data? } func removeAll() { cache.removeAllObjects() }}
// उपयोगlet cache = ImageCacheManager.sharedcache.setImageData(imageData, forKey: "avatar_123")if let cachedData = cache.getImageData(forKey: "avatar_123") { print("कैश से डेटा: \\(cachedData.count) बाइट")}विशेषताएं:
- स्वचालित मेमोरी प्रबंधन - मैन्युअल रूप से ऑब्जेक्ट हटाने की आवश्यकता नहीं है।
- थ्रेड-सुरक्षित - विभिन्न थ्रेड्स से उपयोग किया जा सकता है।
- डेटा संरक्षण की गारंटी नहीं देता - सिस्टम द्वारा कैश साफ़ किया जा सकता है।
URLCache — HTTP अनुरोधों का कैशिंग
URLCache नेटवर्क अनुरोध स्तर पर कैशिंग प्रदान करता है। यह URLSession के साथ काम करता है और स्वचालित रूप से सर्वर प्रतिक्रियाओं को सहेजता है।
import Foundation
// कैश सेटअपlet memoryCapacity = 50 * 1024 * 1024 // 50 MBlet diskCapacity = 100 * 1024 * 1024 // 100 MBlet urlCache = URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "myCache")
URLCache.shared = urlCache
// सत्र कॉन्फ़िगरेशनlet config = URLSessionConfiguration.defaultconfig.requestCachePolicy = .returnCacheDataElseLoadconfig.urlCache = urlCache
let session = URLSession(configuration: config)
// अनुरोध निष्पादित करनाlet url = URL(string: "https://api.example.com/data")!let task = session.dataTask(with: url) { data, response, error in if let data = data { print("\\(data.count) बाइट प्राप्त हुए") // डेटा स्वचालित रूप से कैश हो जाता है }}task.resume()कैशिंग के बारीक समायोजन के लिए, सर्वर साइड पर HTTP हेडर और Cache-Control नीतियों का उपयोग करें।
स्विफ्ट में Redis: सर्वर-साइड कैशिंग
Redis एक उच्च-प्रदर्शन वाला इन-मेमोरी "कुंजी-मान" स्टोर है। सर्वर फ्रेमवर्क (Vapor, Perfect) के साथ काम करने वाले स्विफ्ट डेवलपर्स के लिए, Redis कैशिंग के लिए एक मानक विकल्प है।