RediStack: Asynchroner Redis-Client für Swift (iOS/macOS)
RediStack ist ein moderner, vollständig asynchroner Client für die Arbeit mit Redis, geschrieben in Swift. Die Bibliothek basiert auf dem Framework SwiftNIO, was eine hohe Leistung und einen geringen Speicherverbrauch gewährleistet. RediStack ist ideal für iOS- und macOS-Anwendungen, die schnelles Caching, Sitzungsverwaltung, Nachrichtenwarteschlangen oder Pub/Sub-Funktionalität benötigen.
Hauptfunktionen
- Vollständige Asynchronität basierend auf Swift Concurrency (async/await) und Combine
- Unterstützung aller wichtigen Redis-Datentypen: Strings, Listen, Sets, Hashes, Streams
- Integrierte Pub/Sub-Unterstützung mit automatischer Wiederverbindung
- Automatisches Connection-Pooling
- Unterstützung für Redis Cluster und Sentinel
- SSL/TLS-Verschlüsselung für sichere Verbindungen
- Typsichere Befehle mit Autovervollständigung in Xcode
Installation mit dem Swift Package Manager
Fügen Sie RediStack zu Ihrer Package.swift oder über Xcode hinzu:
// Package.swiftdependencies: [ .package(url: "https://github.com/RediStack/RediStack.git", from: "1.6.0")],targets: [ .target(name: "YourApp", dependencies: ["RediStack"])]Schnellstart: Verbindung zu Redis herstellen
Erstellen Sie zunächst einen Verbindungspool und führen Sie einfache Befehle aus:
import RediStackimport NIO
// EventLoopGroup erstellenlet eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
// Verbindungspool konfigurierenlet pool = RedisConnectionPool( configuration: .init( initialServerConnectionAddresses: [try .init(hostname: "localhost", port: 6379)], maximumConnectionCount: .maximumActiveConnections(5) ), boundEventLoop: eventLoopGroup.next())
// Asynchrone Arbeit mit RedisTask { do { // String setzen und abrufen try await pool.set("greeting", to: "Hello from Swift!") let value = try await pool.get("greeting", as: String.self) print("Erhalten: \\(value ?? "nil")") // "Erhalten: Hello from Swift!" // Arbeiten mit Listen 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("Früchte: \\(fruits)") // ["cherry", "banana", "apple"] } catch { print("Redis-Fehler: \\(error)") }}Beispiel: Pub/Sub (Publisher-Subscriber)
RediStack unterstützt vollwertiges Pub/Sub mit automatischer Wiederherstellung des Abonnements:
import RediStackimport NIO
let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 2)let pool = RedisConnectionPool(...)
// AbonnentTask { let subscriber = pool.makeSubscriber(eventLoop: eventLoopGroup.next()) // Abonnement auf Kanal await subscriber.subscribe(to: "notifications") { channel, message in print("Erhalten auf Kanal \\(channel): \\(message.string ?? "")") } // Fehlerbehandlung beim Abonnement subscriber.onError = { error in print("Pub/Sub-Fehler: \\(error)") }}
// Publisher (Nachricht senden)Task { try await pool.publish("Neue Benachrichtigung", to: "notifications")}Arbeiten mit Hashes und Transaktionen
Beispiel für die Verwendung von Hashes und atomaren Operationen mit Transaktionen:
// Hash-Felder setzentry await pool.hmset("user:1001", with: [ "name": "Ivan Petrov", "email": "ivan@example.com", "age": "30"])
// Alle Felder abrufenlet user = try await pool.hgetall(from: "user:1001")print("Name: \\(user["name"]?.string ?? "")") // "Name: Ivan Petrov"
// Transaktion (atomare Ausführung)try await pool.transaction { transaction in transaction.inc Auch in der Bibliothek
Swagger/OpenAPI-Generierung für C++: Überblick über Tools und Bibliotheken
Swift Task Scheduler für iOS/macOS: EventKit und DispatchSource
E-Mail-Versand mit PHP: Vollständiger Leitfaden zur PHPMailer-Bibliothek
Autorisierung und Authentifizierung in C++: Bibliotheken und praktische Beispiele
Geolokalisierung und Karten in PHP: Bibliotheken, APIs und Codebeispiele