Cliente Redis para Swift (iOS/macOS) – RediStack

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)

\n\n

RediStack es un cliente moderno, completamente asíncrono para Redis, escrito en Swift. Está construido sobre el framework de alto rendimiento SwiftNIO, lo que permite trabajar eficientemente con solicitudes de red sin bloquear el hilo principal. La biblioteca es ideal para aplicaciones iOS y macOS que requieren almacenamiento en caché, gestión de colas o Pub/Sub.

\n\n

RediStack soporta todas las funcionalidades principales de Redis: strings, hashes, listas, conjuntos, transacciones, pipelines y publicación/suscripción (Pub/Sub). La biblioteca se desarrolla activamente y cuenta con el respaldo de la comunidad Swift.

\n\n

Instalación

\n

Añada RediStack a su proyecto a través de Swift Package Manager:

\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/swift-server/RediStack.git", from: "1.0.0")\n],\ntargets: [\n    .target(name: "MyApp", dependencies: ["RediStack"])\n]\n
\n

Para CocoaPods use:

\n
pod 'RediStack', '~> 1.0'\n
\n\n

Conexión básica

\n

Cree una conexión al servidor Redis usando RedisConnection:

\n
import RediStack\nimport NIOCore\nimport NIOPosix\n\nlet eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)\nlet eventLoop = eventLoopGroup.next()\n\nlet connection = try await RedisConnection.connect(\n    to: try .init(hostname: "localhost", port: 6379),\n    on: eventLoop\n)\n
\n\n

Trabajo con datos

\n

Ejemplos de operaciones básicas:

\n
// Establecer valor\ntry await connection.set("user:1:name", to: "Алексей")\ntry await connection.set("user:1:age", to: 30)\n\n// Obtener valor\nlet name: String? = try await connection.get("user:1:name")\nprint(name ?? "no encontrado") // Muestra: Алексей\n\n// Trabajo con hashes\ntry await connection.hset("user:1", field: "email", to: "alex@example.com")\nlet email: String? = try await connection.hget("user:1", field: "email")\n\n// Incremento\nlet newCount = try await connection.increment("page:views")\nprint("Vistas: \\(newCount)")\n
\n\n

Transacciones y pipelines

\n

RediStack soporta pipelines para enviar múltiples comandos a la vez:

\n
let pipeline = connection.pipeline()\npipeline.set("key1", to: "value1")\npipeline.set("key2", to: "value2")\npipeline.get("key1")\nlet results = try await pipeline.execute()\n// results — arreglo de respuestas en el orden de los comandos\n
\n\n

Para transacciones use MULTI/EXEC:

\n
try await connection.sendCommandsImmediately(false)\ntry await connection.set("balance", to: 100)\ntry await connection.decrement("balance")\ntry await connection.sendCommandsImmediately(true)\n
\n\n

Pub/Sub (Publicación y suscripción)

\n

RediStack soporta suscripciones asíncronas a canales:

\n
// Suscripción a un canal\nlet subscriber = connection.subscribe(to: "updates") { event in\n    switch event {\n    case .message(let channel, let message):\n        print("Recibido de \\(channel): \\(message)")\n    default:\n        break\n    }\n}\n\n// Publicación de un mensaje\ntry await connection.publish("¡Hola a todos!", to: "updates")\n
\n\n

Manejo de errores y reconexión

\n

Para aplicaciones en producción es importante manejar las desconexiones. RediStack proporciona mecanismos de reconexión a través de RedisConnectionPool:

\n
let pool = RedisConnectionPool(\n    configuration: .init(\n        initialServerConnectionAddresses: [.init(hostname: "localhost", port: 6379)],\n        maximumConnectionCount: .maximum(5)\n    ),\n    eventLoopGroup: eventLoopGroup\n)\n\n// Use pool como una conexión normal\ntry await pool.set("session:token", to: "abc123")\n
\n\n

Rendimiento

\n

Gracias a SwiftNIO, RediStack garantiza un funcionamiento no bloqueante de todas las operaciones. Esto es especialmente importante para iOS/mac

Recommendations