Caché en Swift: Redis, Memcached y soluciones integradas para iOS/macOS

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course
```html

Introducción: ¿Por qué es necesario el almacenamiento en caché en aplicaciones Swift?

Las aplicaciones modernas de iOS y macOS trabajan con grandes volúmenes de datos: imágenes, respuestas JSON de APIs, resultados de cálculos. Sin almacenamiento en caché, cada acceso a los datos provoca una recarga o recálculo, lo que afecta negativamente el rendimiento, el consumo de tráfico y el tiempo de respuesta. El almacenamiento en caché en Swift es una estrategia de almacenamiento temporal de datos de uso frecuente en un almacenamiento rápido (memoria RAM o disco local) para acelerar el acceso.

En este artículo, exploraremos tres enfoques principales para el almacenamiento en caché en el ecosistema Swift:

  • Soluciones integradas: NSCache y URLCache — herramientas ligeras y eficientes para la mayoría de las tareas.
  • Redis — un potente caché de servidor para sistemas distribuidos.
  • Memcached — un sistema de almacenamiento en caché en memoria de alto rendimiento.

Aprenderá cómo integrar cada una de estas herramientas en un proyecto Swift, verá ejemplos de código y comprenderá qué opción elegir para una tarea específica.

Soluciones integradas: NSCache y URLCache

Apple proporciona dos potentes mecanismos de almacenamiento en caché integrados que no requieren la instalación de bibliotecas de terceros. Son ideales para el 90% de las tareas en el desarrollo móvil.

NSCache — almacenamiento en caché en memoria

NSCache es un diccionario thread-safe con gestión automática de memoria. Elimina automáticamente objetos cuando hay poca memoria RAM, lo que lo hace ideal para almacenar en caché imágenes, modelos de datos y cualquier objeto pesado.

import Foundation

// Creamos un caché para UIImage
let imageCache = NSCache<NSString, UIImage>()

// Función para cargar imagen con almacenamiento en caché
func loadImage(from url: URL, completion: @escaping (UIImage?) -> Void) {
    // Verificamos el caché
    if let cachedImage = imageCache.object(forKey: url.absoluteString as NSString) {
        completion(cachedImage)
        return
    }
    
    // Cargamos los datos
    URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data, let image = UIImage(data: data) else {
            completion(nil)
            return
        }
        // Guardamos en el caché
        imageCache.setObject(image, forKey: url.absoluteString as NSString)
        completion(image)
    }.resume()
}

Ventajas de NSCache:

  • Limpieza automática ante warning de memoria
  • Thread-safety sin bloqueos adicionales
  • Posibilidad de establecer un límite en la cantidad de objetos y el costo total

URLCache — almacenamiento en caché de respuestas HTTP

URLCache es un caché del sistema para solicitudes HTTP. Guarda las respuestas del servidor en disco y en memoria, gestionando automáticamente su ciclo de vida basado en las cabeceras HTTP (Cache-Control, Expires).

import Foundation

// Configuración de URLCache (normalmente en AppDelegate o SceneDelegate)
let cacheSize = 50 * 1024 * 1024 // 50 MB
let urlCache = URLCache(memoryCapacity: cacheSize, diskCapacity: cacheSize, diskPath: "myCache")
URLCache.shared = urlCache

// Ejemplo de solicitud con almacenamiento en caché
let request = URLRequest(url: URL(string: "https://api.example.com/data")!)
URLSession.shared.dataTask(with: request) { data, response, error in
    // URLCache manejará automáticamente el almacenamiento en caché
    // basado en las cabeceras Cache-Control
}.resume()

Cuándo usar URLCache:

  • Para almacenar en caché respuestas de APIs REST
  • Para recursos estáticos (imágenes, archivos de configuración)
  • Cuando se necesita respetar la política de caché del servidor

Redis — caché distribuido para la parte servidora de Swift

Redis es un almacén de datos en memoria de alto rendimiento, que se utiliza a menudo como servidor de caché. Para Swift existen varios clientes, el más popul

```

Blogs

Book Recommendations