Swift में कैशिंग: Redis, Memcached और अंतर्निहित समाधान
कैशिंग iOS और macOS के लिए Swift एप्लिकेशन के प्रदर्शन और प्रतिक्रियाशीलता को बढ़ाने के लिए प्रमुख टूल में से एक है। इस लेख में हम तीन मुख्य दृष्टिकोणों पर चर्चा करेंगे: अंतर्निहित समाधान (NSCache, URLCache), साथ ही बाहरी सिस्टम (Redis और Memcached)। आप जानेंगे कि कब और कौन सा टूल चुनना है, और तैयार कोड उदाहरण प्राप्त करेंगे।
Swift एप्लिकेशन में कैशिंग की आवश्यकता क्यों है?
कैशिंग के बिना, डेटा (नेटवर्क, डिस्क, डेटाबेस) का हर एक्सेस सिस्टम को लोड करता है और प्रतिक्रिया समय बढ़ाता है। कैश बार-बार उपयोग किए जाने वाले डेटा को RAM में संग्रहीत करने की अनुमति देता है, जिससे विलंबता और सर्वर लोड कम होता है। मोबाइल उपकरणों के लिए यह विशेष रूप से महत्वपूर्ण है: डेटा बचत, बैटरी बचत और UX में सुधार।
1. अंतर्निहित समाधान: NSCache और URLCache
Apple दो शक्तिशाली अंतर्निहित टूल प्रदान करता है: ऑब्जेक्ट कैशिंग के लिए NSCache और नेटवर्क अनुरोधों को कैश करने के लिए URLCache।
NSCache
NSCache एक थ्रेड-सेफ कैश है जो स्वचालित रूप से मेमोरी प्रबंधित करता है। यह मेमोरी कम होने पर ऑब्जेक्ट हटा देता है, जो iOS के लिए आदर्श है।
import Foundation
class ImageCacheManager { static let shared = ImageCacheManager() private let cache = NSCache<NSString, UIImage>() private init() { cache.countLimit = 100 // अधिकतम 100 इमेज cache.totalCostLimit = 50 * 1024 * 1024 // 50 MB } func getImage(for key: String) -> UIImage? { return cache.object(forKey: key as NSString) } func setImage(_ image: UIImage, for key: String, cost: Int = 0) { cache.setObject(image, forKey: key as NSString, cost: cost) } func removeImage(for key: String) { cache.removeObject(forKey: key as NSString) } func clearCache() { cache.removeAllObjects() }}URLCache
URLCache स्वचालित रूप से HTTP प्रतिक्रियाओं को कैश करता है। इसे विशिष्ट URLSession सत्र के लिए कॉन्फ़िगर किया जा सकता है।
import Foundation
// URLCache कॉन्फ़िगरेशनlet memoryCapacity = 50 * 1024 * 1024 // 50 MBlet diskCapacity = 100 * 1024 * 1024 // 100 MBlet cache = URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "myCache")
let configuration = URLSessionConfiguration.defaultconfiguration.urlCache = cacheconfiguration.requestCachePolicy = .returnCacheDataElseLoad
let session = URLSession(configuration: configuration)
// अनुरोध का उदाहरण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()2. Swift के लिए Redis: सर्वर-साइड कैशिंग
Redis एक in-memory डेटाबेस है, जिसका उपयोग अक्सर सर्वर-साइड कैशिंग के लिए किया जाता है। Swift के लिए लोकप्रिय लाइब्रेरी Vapor Redis (Vapor के लिए) या RediStack (किसी भी प्रोजेक्ट के लिए) उपलब्ध है।
RediStack के साथ उदाहरण
import RediStackimport NIOCoreimport NIOPosix
// Redis से कनेक्शनlet eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)let connection = try RedisConnection.make( configuration: .init(hostname: "localhost", port: 6379), boundEventLoop: eventLoopGroup.next()).wait()
// मान सेट करनाtry connection.set("user:123", to: "{\\"name\\": \\"Alice\\", \\"age\\": 30}").wait()
// मान प्राप्त करनाlet result = try connection.get("user:123", as: String.self).wait()print("Redis से प्राप्त: \\(result ?? "nil")")
// कनेक्शन बंद करनाtry connection.close().wait()try eventLoopGroup.syncShutdownGracefully()
```