स्विफ्ट (iOS/macOS) में कैशिंग: Redis, NSCache और अन्य समाधान

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

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

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

स्विफ्ट (iOS/macOS) में कैशिंग: Redis और अन्य उपकरण

\n\n

कैशिंग स्विफ्ट में मोबाइल और डेस्कटॉप अनुप्रयोगों के प्रदर्शन को अनुकूलित करने की प्रमुख रणनीतियों में से एक है। यह डेटा लोडिंग समय को कम करने, नेटवर्क और सर्वर पर लोड को कम करने, साथ ही ऑफ़लाइन मोड में एप्लिकेशन के संचालन को सुनिश्चित करने में मदद करता है। Apple इकोसिस्टम में अंतर्निहित तंत्र (NSCache, URLCache) और तृतीय-पक्ष समाधान दोनों उपलब्ध हैं, जिनमें Redis के साथ एकीकरण शामिल है। इस लेख में, हम कोड उदाहरणों के साथ iOS और macOS के लिए मुख्य कैशिंग उपकरणों पर विस्तार से चर्चा करेंगे।

\n\n

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

\n\n

NSCache — मेमोरी में हल्का कैश

\n

NSCache एक थ्रेड-सेफ, स्वचालित रूप से प्रबंधित कैश है जो मेमोरी की कमी होने पर ऑब्जेक्ट्स को हटा देता है। यह छवियों, मॉडल डेटा या गणना परिणामों के अस्थायी भंडारण के लिए आदर्श है।

\n\n
import Foundation\n\nlet imageCache = NSCache<NSString, UIImage>()\n\n// सीमाएँ निर्धारित करें\nimageCache.countLimit = 100    // अधिकतम 100 ऑब्जेक्ट\nimageCache.totalCostLimit = 50 * 1024 * 1024 // 50 MB\n\n// सहेजना\nfunc cacheImage(_ image: UIImage, forKey key: String) {\n    imageCache.setObject(image, forKey: key as NSString, cost: image.size.width * image.size.height * 4)\n}\n\n// प्राप्त करना\nfunc getCachedImage(forKey key: String) -> UIImage? {\n    return imageCache.object(forKey: key as NSString)\n}
\n\n

लाभ: सरलता, स्वचालित सफाई, ऑब्जेक्ट लागत का समर्थन।

\n

कमियाँ: केवल मेमोरी में कैश, कोई स्थायित्व नहीं।

\n\n

URLCache — HTTP अनुरोधों की कैशिंग

\n

URLCache स्वचालित रूप से URLSession के उत्तरों को कैश करता है। यह मेमोरी और डिस्क दोनों पर काम करता है। इसे वैश्विक रूप से या किसी विशिष्ट सत्र के लिए कॉन्फ़िगर किया जा सकता है।

\n\n
import Foundation\n\n// मेमोरी में 50 MB और डिस्क पर 100 MB कैश सेट करें\nlet cache = URLCache(memoryCapacity: 50 * 1024 * 1024,\n                     diskCapacity: 100 * 1024 * 1024,\n                     diskPath: "myCache")\nURLCache.shared = cache\n\n// URLSession के साथ उपयोग\nlet config = URLSessionConfiguration.default\nconfig.urlCache = cache\nconfig.requestCachePolicy = .returnCacheDataElseLoad\nlet session = URLSession(configuration: config)\n\nlet request = URLRequest(url: URL(string: "https://api.example.com/data")!)\nlet task = session.dataTask(with: request) { data, response, error in\n    // डेटा स्वचालित रूप से कैश हो जाएगा\n}\ntask.resume()
\n\n

कैशिंग नीति का प्रबंधन सर्वर के Cache-Control हेडर या requestCachePolicy के माध्यम से किया जाता है।

\n\n

2. ऑफ़लाइन पहुँच के लिए फ़ाइल कैशिंग

\n

जब एप्लिकेशन के बीच डेटा को सहेजने की आवश्यकता होती है, तो Caches निर्देशिका में फ़ाइल कैशिंग का उपयोग किया जाता है। यह JSON, छवियों या क्रमबद्ध ऑब्जेक्ट्स के लिए सुविधाजनक है।

\n\n
import Foundation\n\nclass FileCache {\n    private let fileManager = FileManager.default\n    private lazy var cacheDirectory: URL = {\n        let paths = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)\n        return paths[0].appendingPathComponent("DataCache", isDirectory: true)\n    }()\n    \n    init() {\n        try? fileManager.createDirectory(at: cacheDirectory, withIntermediateDirectories: true)\n    }\n    \n    func save(data: Data, forKey key: String) {\n        let fileURL = cacheDirectory.appendingPathComponent(key)\n        try? data.write(to: fileURL)\n    }\n    \n    func load(forKey key: String) -> Data? {\n        let fileURL = cacheDirectory.appendingPathComponent(key)\n        return try? Data(contentsOf: fileURL)\n    }\n    \n    func clearAll() {\n        try? fileManager.removeItem(at: cacheDirectory)\n        try? fileManager.createDirectory(at: cacheDirectory, withIntermediateDirectories: true)\n    }\n}
\n\n

3. Redis — सर्वर-साइड के लिए वितरित कैशिंग

अनुशंसाएँ