Cliente Redis Swift: RediStack para iOS/macOS

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

RediStack é um cliente moderno e totalmente assíncrono para trabalhar com Redis, escrito em Swift. A biblioteca é construída sobre o framework SwiftNIO, o que garante alto desempenho e baixo consumo de memória. RediStack é ideal para aplicações iOS e macOS que exigem cache rápido, gerenciamento de sessões, filas de mensagens ou funcionalidade Pub/Sub.



Principais Recursos

  • Assincronia total baseada em Swift Concurrency (async/await) e Combine
  • Suporte a todos os principais tipos de dados do Redis: strings, listas, conjuntos, hashes, streams
  • Suporte nativo a Pub/Sub com reconexão automática
  • Pooling automático de conexões (Connection Pool)
  • Suporte a Redis Cluster e Sentinel
  • Criptografia SSL/TLS para conexão segura
  • Comandos type-safe com autocompletar no Xcode


Instalação com Swift Package Manager

Adicione o RediStack ao seu Package.swift ou via Xcode:

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


Início Rápido: Conectando ao Redis

Para começar, crie um pool de conexões e execute comandos simples:

import RediStackimport NIO

// Criando um EventLoopGrouplet eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)

// Configurando o pool de conexõeslet pool = RedisConnectionPool( configuration: .init( initialServerConnectionAddresses: [try .init(hostname: "localhost", port: 6379)], maximumConnectionCount: .maximumActiveConnections(5) ), boundEventLoop: eventLoopGroup.next())

// Trabalho assíncrono com RedisTask { do { // Definindo e obtendo uma string try await pool.set("greeting", to: "Hello from Swift!") let value = try await pool.get("greeting", as: String.self) print("Recebido: \\(value ?? "nil")") // "Recebido: Hello from Swift!" // Trabalhando com 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("Erro Redis: \\(error)") }}


Exemplo: Pub/Sub (Publicador-Assinante)

RediStack suporta Pub/Sub completo com recuperação automática de assinatura:

import RediStackimport NIO

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

// AssinanteTask { let subscriber = pool.makeSubscriber(eventLoop: eventLoopGroup.next()) // Assinando um canal await subscriber.subscribe(to: "notifications") { channel, message in print("Recebido no canal \\(channel): \\(message.string ?? "")") } // Tratamento de erros de assinatura subscriber.onError = { error in print("Erro Pub/Sub: \\(error)") }}

// Publicador (envio de mensagem)Task { try await pool.publish("Nova notificação", to: "notifications")}


Trabalhando com Hashes e Transações

Exemplo de uso de hashes e operações atômicas com transações:

// Definindo campos de hashtry await pool.hmset("user:1001", with: [    "name": "João Silva",    "email": "joao@example.com",    "age": "30"])

// Obtendo todos os camposlet user = try await pool.hgetall(from: "user:1001")print("Nome: \\(user["name"]?.string ?? "")") // "Nome: João Silva"

// Transação (execução atômica)try await pool.transaction { transaction in transaction.inc

Recommendations