التخزين المؤقت في Swift: Redis وMemcached والحلول المدمجة لنظامي iOS/macOS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا نحتاج إلى التخزين المؤقت في تطبيقات Swift؟

تطبيقات iOS و macOS الحديثة تتعامل مع كميات كبيرة من البيانات: الصور، استجابات JSON من API، نتائج العمليات الحسابية. بدون التخزين المؤقت، كل وصول إلى البيانات يؤدي إلى إعادة تحميل أو إعادة حساب، مما يؤثر سلباً على الأداء، استهلاك البيانات، ووقت الاستجابة. التخزين المؤقت في Swift هو استراتيجية للتخزين المؤقت للبيانات المستخدمة بشكل متكرر في وحدة تخزين سريعة (ذاكرة الوصول العشوائي أو القرص المحلي) لتسريع الوصول.

في هذه المقالة، سننظر في ثلاثة أساليب رئيسية للتخزين المؤقت في نظام Swift البيئي:

  • الحلول المضمنة: NSCache و URLCache — أدوات خفيفة وفعالة لمعظم المهام.
  • Redis — تخزين مؤقت قوي من جانب الخادم للأنظمة الموزعة.
  • Memcached — نظام تخزين مؤقت عالي الأداء في الذاكرة.

ستتعلم كيفية دمج كل من هذه الأدوات في مشروع Swift، وسترى أمثلة على الكود وستفهم أي خيار تختار لمهمة محددة.



الحلول المضمنة: NSCache و URLCache

توفر Apple آليتين مضمنتين قويتين للتخزين المؤقت لا تتطلبان تثبيت مكتبات خارجية. إنهما مثاليتان لـ 90% من المهام في تطوير التطبيقات المحمولة.



NSCache — التخزين المؤقت في الذاكرة

NSCache هو قاموس آمن للخيوط مع إدارة تلقائية للذاكرة. يقوم تلقائياً بإزالة الكائنات عند نقص ذاكرة الوصول العشوائي، مما يجعله مثالياً للتخزين المؤقت للصور، نماذج البيانات، وأي كائنات ثقيلة.

import Foundation

// إنشاء تخزين مؤقت لـ UIImagelet imageCache = NSCache<NSString, UIImage>()

// دالة تحميل الصورة مع التخزين المؤقتfunc loadImage(from url: URL, completion: @escaping (UIImage?) -> Void) { // التحقق من التخزين المؤقت if let cachedImage = imageCache.object(forKey: url.absoluteString as NSString) { completion(cachedImage) return } // تحميل البيانات URLSession.shared.dataTask(with: url) { data, response, error in guard let data = data, let image = UIImage(data: data) else { completion(nil) return } // حفظ في التخزين المؤقت imageCache.setObject(image, forKey: url.absoluteString as NSString) completion(image) }.resume()}

مزايا NSCache:

  • التنظيف التلقائي عند تحذير الذاكرة (memory warning)
  • الأمان للخيوط دون أقفال إضافية
  • إمكانية تعيين حد لعدد الكائنات والتكلفة الإجمالية


URLCache — التخزين المؤقت لاستجابات HTTP

URLCache هو تخزين مؤقت نظامي لطلبات HTTP. يقوم بحفظ استجابات الخادم على القرص وفي الذاكرة، ويدير تلقائياً عمرها الافتراضي بناءً على رؤوس HTTP (Cache-Control, Expires).

import Foundation

// إعداد URLCache (عادة في AppDelegate أو SceneDelegate)let cacheSize = 50 * 1024 * 1024 // 50 MBlet urlCache = URLCache(memoryCapacity: cacheSize, diskCapacity: cacheSize, diskPath: "myCache")URLCache.shared = urlCache

// مثال على طلب مع التخزين المؤقتlet request = URLRequest(url: URL(string: "https://api.example.com/data")!)URLSession.shared.dataTask(with: request) { data, response, error in // URLCache سيتعامل تلقائياً مع التخزين المؤقت // بناءً على رؤوس Cache-Control}.resume()

متى تستخدم URLCache:

  • للتخزين المؤقت لاستجابات REST API
  • للموارد الثابتة (الصور، ملفات التكوين)
  • عندما تحتاج إلى الامتثال لسياسة التخزين المؤقت للخادم


Redis — تخزين مؤقت موزع للجزء الخادم من Swift

Redis هو مخزن بيانات عالي الأداء في الذاكرة، يُستخدم غالباً كخادم تخزين مؤقت. يوجد العديد من العملاء لـ Swift، أشهرهم

المدونات

توصيات الكتب