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

RediStack : Client Redis asynchrone pour Swift (iOS/macOS)

RediStack est un client moderne, entièrement asynchrone pour travailler avec Redis, écrit en Swift. La bibliothèque est construite sur la base du framework SwiftNIO, ce qui garantit des performances élevées et une faible consommation de mémoire. RediStack est idéal pour les applications iOS et macOS nécessitant une mise en cache rapide, une gestion des sessions, des files d'attente de messages ou des fonctionnalités Pub/Sub.



Fonctionnalités principales

  • Asynchronisme complet basé sur Swift Concurrency (async/await) et Combine
  • Prise en charge de tous les principaux types de données Redis : chaînes, listes, ensembles, hachages, flux
  • Prise en charge intégrée de Pub/Sub avec reconnexion automatique
  • Mise en pool automatique des connexions (Connection Pool)
  • Prise en charge de Redis Cluster et Sentinel
  • Chiffrement SSL/TLS pour une connexion sécurisée
  • Commandes typées avec autocomplétion dans Xcode


Installation avec Swift Package Manager

Ajoutez RediStack à votre 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"])]


Démarrage rapide : connexion à Redis

Pour commencer, créez un pool de connexions et exécutez des commandes simples :

import RediStackimport NIO

// Créer un EventLoopGrouplet eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)

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

// Travail asynchrone avec RedisTask { do { // Définir et obtenir une chaîne try await pool.set("greeting", to: "Hello from Swift!") let value = try await pool.get("greeting", as: String.self) print("Reçu : \\(value ?? "nil")") // "Reçu : Hello from Swift!" // Travailler avec les listes 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("Fruits : \\(fruits)") // ["cherry", "banana", "apple"] } catch { print("Erreur Redis : \\(error)") }}


Exemple : Pub/Sub (éditeur-abonné)

RediStack prend en charge le Pub/Sub complet avec restauration automatique de l'abonnement :

import RediStackimport NIO

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

// AbonnéTask { let subscriber = pool.makeSubscriber(eventLoop: eventLoopGroup.next()) // Abonnement à un canal await subscriber.subscribe(to: "notifications") { channel, message in print("Reçu sur le canal \\(channel) : \\(message.string ?? "")") } // Gestion des erreurs d'abonnement subscriber.onError = { error in print("Erreur Pub/Sub : \\(error)") }}

// Éditeur (envoi d'un message)Task { try await pool.publish("Nouvelle notification", to: "notifications")}


Travail avec les hachages et les transactions

Exemple d'utilisation des hachages et des opérations atomiques avec les transactions :

// Définir les champs d'un hachagetry await pool.hmset("user:1001", with: [    "name": "Ivan Petrov",    "email": "ivan@example.com",    "age": "30"])

// Obtenir tous les champslet user = try await pool.hgetall(from: "user:1001")print("Nom : \\(user["name"]?.string ?? "")") // "Nom : Ivan Petrov"

// Transaction (exécution atomique)try await pool.transaction { transaction in transaction.inc

Recommendations