परिचय: Swift ऐप्स में कैशिंग क्यों ज़रूरी है?
\nकैशिंग मोबाइल और सर्वर ऐप्लिकेशन के प्रदर्शन को बेहतर बनाने की एक प्रमुख तकनीक है। Swift (iOS/macOS) की दुनिया में, सही कैशिंग से डेटा लोडिंग का समय कम होता है, नेटवर्क और डेटाबेस पर लोड घटता है, और उपयोगकर्ता अनुभव बेहतर होता है। इस लेख में हम Swift में कैशिंग के तीन मुख्य तरीकों को समझेंगे: बिल्ट-इन NSCache, लोकप्रिय सर्वर सिस्टम Redis और Memcached, और iOS/macOS प्रोजेक्ट्स में उनका एकीकरण।
1. बिल्ट-इन कैशिंग: NSCache और URLCache
\nज़्यादातर iOS ऐप्स के लिए बाहरी सर्वर की ज़रूरत नहीं होती — Apple के अंतर्निहित मैकेनिज़्म ही काफी होते हैं।
\n\n1.1 NSCache — सरल और प्रभावी मेमोरी कैश
\nNSCache एक थ्रेड-सेफ डिक्शनरी है जो मेमोरी कम होने पर ऑब्जेक्ट्स को ऑटोमैटिक हटा देता है। यह इमेज, JSON रिस्पॉन्स या किसी भी भारी कंप्यूटेशन वाले ऑब्जेक्ट को कैश करने के लिए एकदम सही है।
import Foundation\n\nclass ImageCache {\n private let cache = NSCache<NSString, NSData>()\n\n func setImageData(_ data: Data, forKey key: String) {\n cache.setObject(data as NSData, forKey: key as NSString)\n }\n\n func getImageData(forKey key: String) -> Data? {\n return cache.object(forKey: key as NSString) as Data?\n }\n}\nसुझाव: बेहतर प्रदर्शन के लिए countLimit और totalCostLimit सेट करें।
1.2 URLCache — नेटवर्क रिक्वेस्ट कैशिंग
\nURLCache HTTP रिस्पॉन्स को डिस्क और मेमोरी में ऑटोमैटिक कैश करता है। इसे URLSessionConfiguration के ज़रिए सेट किया जाता है:
let config = URLSessionConfiguration.default\nconfig.urlCache = URLCache(memoryCapacity: 50 * 1024 * 1024, // 50 MB\n diskCapacity: 100 * 1024 * 1024, // 100 MB\n diskPath: "myCache")\nlet session = URLSession(configuration: config)\nयह स्टैटिक कंटेंट (इमेज, लंबी अवधि वाले API रिस्पॉन्स) के लिए बहुत उपयोगी है।
\n\n2. Swift प्रोजेक्ट्स में Redis
\nRedis एक in-memory डेटा स्टोर है जो स्ट्रिंग, लिस्ट, हैश जैसी संरचनाओं को सपोर्ट करता है। Swift Server-side प्रोजेक्ट्स (Vapor, Perfect) में Redis का उपयोग सेशन, क्यू और तेज़ कैश के लिए किया जाता है।
\n\n2.1 Vapor के साथ Redis कनेक्शन
\nVapor vapor/redis पैकेज प्रदान करता है। इंस्टॉलेशन:
// Package.swift\ndependencies: [\n .package(url: "https://github.com/vapor/redis.git", from: "4.0.0")\n]\nयूज़र डेटा कैश करने का उदाहरण:
\nimport Vapor\nimport Redis\n\nfunc cacheUser(_ user: User, on request: Request) async throws {\n let key = "user:\\(user.id)"\n let data = try JSONEncoder().encode(user)\n try await request.redis.set(key, to: data)\n // TTL (टाइम-टू-लिव) 1 घंटा सेट करें\n try await request.redis.expire(key, after: .hours(1))\n}\n\nfunc getUser(from request: Request, id: Int) async throws -> User? {\n let key = "user:\\(id)"\n guard let data = try await request.redis.get(key, as: Data.self) else {\n return nil\n }\n return try JSONDecoder().decode(User.self, from: data)\n}\n\n2.2 Swift के लिए Redis के फायदे
\n- \n
- स्पीड: डेटा RAM में स्टोर होता है — मिलीसेकंड से भी कम विलंबता। \n
- TTL: कीज़ की ऑटोमैटिक समाप्ति। \n
- Pub/Sub: सर्विसेज़ के बीच एसिंक्रोनस कम्युनिकेशन। \n
3. Memcached: हल्का डिस्ट्रीब्यूटेड कैशिंग
\nMemcached एक पुरानी लेकिन लोकप्रिय कैशिंग सिस्टम है। Redis के विपरीत, यह जटिल डेटा संरचनाओं और पर्सिस्टेंस को सपोर्ट नहीं करता, लेकिन की-वैल्यू कैश के लिए बेहद सरल और प्रभावी है।
\n\n