Cliente Redis Swift: RediStack 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

RediStack: Cliente Redis asíncrono para Swift (iOS/macOS)

RediStack es un cliente moderno y completamente asíncrono para trabajar con Redis, escrito en Swift. La biblioteca está construida sobre el framework SwiftNIO, lo que garantiza un alto rendimiento y un bajo consumo de memoria. RediStack es ideal para aplicaciones iOS y macOS que requieren almacenamiento en caché rápido, gestión de sesiones, colas de mensajes o funcionalidad Pub/Sub.



Características principales

  • Asincronía completa basada en Swift Concurrency (async/await) y Combine
  • Soporte para todos los tipos de datos principales de Redis: cadenas, listas, conjuntos, hashes, flujos
  • Soporte integrado para Pub/Sub con reconexión automática
  • Pooling de conexiones automático (Connection Pool)
  • Soporte para Redis Cluster y Sentinel
  • Cifrado SSL/TLS para conexiones seguras
  • Comandos type-safe con autocompletado en Xcode


Instalación con Swift Package Manager

Añade RediStack a tu Package.swift o a través de Xcode:

// Package.swiftdependencies: [    .package(url: "https://github.com/RediStack/RediStack.git", from: "1.6.0")],targets: [    .target(name: "YourApp", dependencies: ["RediStack"])]


Inicio rápido: conexión a Redis

Para empezar, crea un pool de conexiones y ejecuta comandos simples:

import RediStackimport NIO

// Creamos un EventLoopGrouplet eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)

// Configuramos el pool de conexioneslet pool = RedisConnectionPool( configuration: .init( initialServerConnectionAddresses: [try .init(hostname: "localhost", port: 6379)], maximumConnectionCount: .maximumActiveConnections(5) ), boundEventLoop: eventLoopGroup.next())

// Trabajo asíncrono con RedisTask { do { // Establecer y obtener una cadena try await pool.set("greeting", to: "Hello from Swift!") let value = try await pool.get("greeting", as: String.self) print("Recibido: \\(value ?? "nil")") // "Recibido: Hello from Swift!" // Trabajo con listas try await pool.lpush(["apple", "banana", "cherry"], into: "fruits") let fruits = try await pool.lrange(from: "fruits", firstIndex: 0, lastIndex: -1, as: [String].self) print("Frutas: \\(fruits)") // ["cherry", "banana", "apple"] } catch { print("Error de Redis: \\(error)") }}


Ejemplo: Pub/Sub (publicador-suscriptor)

RediStack soporta Pub/Sub completo con recuperación automática de suscripciones:

import RediStackimport NIO

let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 2)let pool = RedisConnectionPool(...)

// SuscriptorTask { let subscriber = pool.makeSubscriber(eventLoop: eventLoopGroup.next()) // Suscripción a un canal await subscriber.subscribe(to: "notifications") { channel, message in print("Recibido en el canal \\(channel): \\(message.string ?? "")") } // Manejo de errores de suscripción subscriber.onError = { error in print("Error de Pub/Sub: \\(error)") }}

// Publicador (envío de mensaje)Task { try await pool.publish("Nueva notificación", to: "notifications")}


Trabajo con hashes y transacciones

Ejemplo de uso de hashes y operaciones atómicas con transacciones:

// Establecer campos de un hashtry await pool.hmset("user:1001", with: [    "name": "Iván Petrov",    "email": "ivan@example.com",    "age": "30"])

// Obtener todos los camposlet user = try await pool.hgetall(from: "user:1001")print("Nombre: \\(user["name"]?.string ?? "")") // "Nombre: Iván Petrov"

// Transacción (ejecución atómica)try await pool.transaction { transaction in transaction.inc

Recommendations