Client Redis pour Swift (iOS/macOS) – RediStack

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)

\n\n

RediStack est un client moderne, entièrement asynchrone pour Redis, écrit en Swift. Il est construit sur la base du framework haute performance SwiftNIO, ce qui permet de travailler efficacement avec les requêtes réseau sans bloquer le thread principal. La bibliothèque est idéale pour les applications iOS et macOS nécessitant une mise en cache, une gestion de files d'attente ou du Pub/Sub.

\n\n

RediStack prend en charge toutes les fonctionnalités principales de Redis : chaînes, hachages, listes, ensembles, transactions, pipelines et publication/abonnement (Pub/Sub). La bibliothèque est activement développée et maintenue par la communauté Swift.

\n\n

Installation

\n

Ajoutez RediStack à votre projet via 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

Pour CocoaPods, utilisez :

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

Connexion de base

\n

Créez une connexion au serveur Redis à l'aide de 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

Manipulation des données

\n

Exemples d'opérations de base :

\n
// Définition d'une valeur\ntry await connection.set("user:1:name", to: "Alexeï")\ntry await connection.set("user:1:age", to: 30)\n\n// Récupération d'une valeur\nlet name: String? = try await connection.get("user:1:name")\nprint(name ?? "non trouvé") // Affiche : Alexeï\n\n// Travail avec les hachages\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// Incrémentation\nlet newCount = try await connection.increment("page:views")\nprint("Vues : \\(newCount)")\n
\n\n

Transactions et pipelines

\n

RediStack prend en charge les pipelines pour envoyer plusieurs commandes en une seule fois :

\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 — tableau de réponses dans l'ordre des commandes\n
\n\n

Pour les transactions, utilisez 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 (Publication et abonnement)

\n

RediStack prend en charge les abonnements asynchrones aux canaux :

\n
// Abonnement à un canal\nlet subscriber = connection.subscribe(to: "updates") { event in\n    switch event {\n    case .message(let channel, let message):\n        print("Reçu de \\(channel) : \\(message)")\n    default:\n        break\n    }\n}\n\n// Publication d'un message\ntry await connection.publish("Bonjour à tous !", to: "updates")\n
\n\n

Gestion des erreurs et reconnexion

\n

Pour les applications de production, il est important de gérer les ruptures de connexion. RediStack fournit des mécanismes de reconnexion via 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// Utilisez pool comme une connexion normale\ntry await pool.set("session:token", to: "abc123")\n
\n\n

Performances

\n

Grâce à SwiftNIO, RediStack assure un fonctionnement non bloquant de toutes les opérations. Cela est particulièrement important pour les applications iOS/mac

Recommendations