Mise en cache en Swift : Redis, Memcached et solutions intégrées pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi mettre en cache dans les applications Swift ?

Les applications iOS et macOS modernes travaillent avec de grands volumes de données : images, réponses JSON d'API, résultats de calculs. Sans mise en cache, chaque accès aux données entraîne un rechargement ou un recalcul, ce qui impacte négativement les performances, la consommation de données et le temps de réponse. La mise en cache en Swift est une stratégie de stockage temporaire des données fréquemment utilisées dans un stockage rapide (RAM ou disque local) pour accélérer l'accès.

Dans cet article, nous examinerons trois approches principales de mise en cache dans l'écosystème Swift :

  • Solutions intégrées : NSCache et URLCache — des outils légers et efficaces pour la plupart des tâches.
  • Redis — un cache serveur puissant pour les systèmes distribués.
  • Memcached — un système de mise en cache en mémoire haute performance.

Vous apprendrez comment intégrer chacun de ces outils dans un projet Swift, verrez des exemples de code et comprendrez quelle option choisir pour une tâche spécifique.



Solutions intégrées : NSCache et URLCache

Apple fournit deux mécanismes de mise en cache intégrés puissants qui ne nécessitent pas l'installation de bibliothèques tierces. Ils sont parfaits pour 90% des tâches en développement mobile.



NSCache — mise en cache en mémoire

NSCache est un dictionnaire thread-safe avec gestion automatique de la mémoire. Il supprime automatiquement les objets en cas de manque de RAM, ce qui le rend idéal pour la mise en cache d'images, de modèles de données et de tout objet lourd.

import Foundation

// Création d'un cache pour UIImagelet imageCache = NSCache<NSString, UIImage>()

// Fonction de chargement d'image avec mise en cachefunc loadImage(from url: URL, completion: @escaping (UIImage?) -> Void) { // Vérification du cache if let cachedImage = imageCache.object(forKey: url.absoluteString as NSString) { completion(cachedImage) return } // Chargement des données URLSession.shared.dataTask(with: url) { data, response, error in guard let data = data, let image = UIImage(data: data) else { completion(nil) return } // Sauvegarde dans le cache imageCache.setObject(image, forKey: url.absoluteString as NSString) completion(image) }.resume()}

Avantages de NSCache :

  • Nettoyage automatique en cas d'avertissement mémoire
  • Sécurité des threads sans verrous supplémentaires
  • Possibilité de définir une limite sur le nombre d'objets et le coût total


URLCache — mise en cache des réponses HTTP

URLCache est un cache système pour les requêtes HTTP. Il enregistre les réponses du serveur sur le disque et en mémoire, en gérant automatiquement leur durée de vie en fonction des en-têtes HTTP (Cache-Control, Expires).

import Foundation

// Configuration d'URLCache (généralement dans AppDelegate ou SceneDelegate)let cacheSize = 50 * 1024 * 1024 // 50 MBlet urlCache = URLCache(memoryCapacity: cacheSize, diskCapacity: cacheSize, diskPath: "myCache")URLCache.shared = urlCache

// Exemple de requête avec mise en cachelet request = URLRequest(url: URL(string: "https://api.example.com/data")!)URLSession.shared.dataTask(with: request) { data, response, error in // URLCache gère automatiquement la mise en cache // en fonction des en-têtes Cache-Control}.resume()

Quand utiliser URLCache :

  • Pour la mise en cache des réponses d'API REST
  • Pour les ressources statiques (images, fichiers de configuration)
  • Lorsqu'il faut respecter la politique de cache du serveur


Redis — cache distribué pour la partie serveur Swift

Redis est un magasin de données en mémoire haute performance, souvent utilisé comme serveur de cache. Pour Swift, il existe plusieurs clients, le plus popul

Blogs

Book Recommendations