RediStack: Swift (iOS/macOS) के लिए एसिंक्रोनस Redis क्लाइंट
RediStack एक आधुनिक, पूरी तरह से एसिंक्रोनस Redis क्लाइंट है जो Swift में लिखा गया है। यह हाई-परफॉर्मेंस SwiftNIO फ्रेमवर्क पर आधारित है, जो मुख्य थ्रेड को ब्लॉक किए बिना नेटवर्क रिक्वेस्ट को कुशलतापूर्वक संभालता है। यह लाइब्रेरी iOS और macOS ऐप्स के लिए आदर्श है जहाँ कैशिंग, क्यू मैनेजमेंट या Pub/Sub की आवश्यकता होती है।
RediStack Redis की सभी प्रमुख सुविधाओं को सपोर्ट करता है: स्ट्रिंग्स, हैशेज़, लिस्ट्स, सेट्स, ट्रांजेक्शन, पाइपलाइन और पब्लिकेशन/सब्सक्रिप्शन (Pub/Sub)। यह लाइब्रेरी लगातार विकसित हो रही है और Swift समुदाय द्वारा समर्थित है।
इंस्टॉलेशन
Swift Package Manager के माध्यम से अपने प्रोजेक्ट में RediStack जोड़ें:
// Package.swift
dependencies: [
.package(url: "https://github.com/swift-server/RediStack.git", from: "1.0.0")
],
targets: [
.target(name: "MyApp", dependencies: ["RediStack"])
]
CocoaPods के लिए उपयोग करें:
pod 'RediStack', '~> 1.0'
बेसिक कनेक्शन
RedisConnection का उपयोग करके Redis सर्वर से कनेक्शन बनाएं:
import RediStack
import NIOCore
import NIOPosix
let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let eventLoop = eventLoopGroup.next()
let connection = try await RedisConnection.connect(
to: try .init(hostname: "localhost", port: 6379),
on: eventLoop
)
डेटा के साथ काम करना
मुख्य ऑपरेशन के उदाहरण:
// वैल्यू सेट करना
try await connection.set("user:1:name", to: "राहुल")
try await connection.set("user:1:age", to: 30)
// वैल्यू प्राप्त करना
let name: String? = try await connection.get("user:1:name")
print(name ?? "नहीं मिला") // आउटपुट: राहुल
// हैशेज़ के साथ काम करना
try await connection.hset("user:1", field: "email", to: "rahul@example.com")
let email: String? = try await connection.hget("user:1", field: "email")
// इंक्रीमेंट
let newCount = try await connection.increment("page:views")
print("व्यूज़: \(newCount)")
ट्रांजेक्शन और पाइपलाइन
RediStack एक साथ कई कमांड भेजने के लिए पाइपलाइन सपोर्ट करता है:
let pipeline = connection.pipeline()
pipeline.set("key1", to: "value1")
pipeline.set("key2", to: "value2")
pipeline.get("key1")
let results = try await pipeline.execute()
// results — कमांड के क्रम में उत्तरों की एक सूची
ट्रांजेक्शन के लिए MULTI/EXEC का उपयोग करें:
try await connection.sendCommandsImmediately(false)
try await connection.set("balance", to: 100)
try await connection.decrement("balance")
try await connection.sendCommandsImmediately(true)
Pub/Sub (प्रकाशन और सदस्यता)
RediStack चैनलों पर एसिंक्रोनस सब्सक्रिप्शन सपोर्ट करता है:
// चैनल की सदस्यता लें
let subscriber = connection.subscribe(to: "updates") { event in
switch event {
case .message(let channel, let message):
print("\(channel) से प्राप्त: \(message)")
default:
break
}
}
// संदेश प्रकाशित करें
try await connection.publish("सभी को नमस्ते!", to: "updates")
एरर हैंडलिंग और पुनः कनेक्शन
प्रोडक्शन ऐप्स के लिए कनेक्शन टूटने को संभालना महत्वपूर्ण है। RediStack RedisConnectionPool के माध्यम से पुनः कनेक्शन तंत्र प्रदान करता है:
let pool = RedisConnectionPool(
configuration: .init(
initialServerConnectionAddresses: [.init(hostname: "localhost", port: 6379)],
maximumConnectionCount: .maximum(5)
),
eventLoopGroup: eventLoopGroup
)
// pool को सामान्य कनेक्शन की तरह उपयोग करें
try await pool.set("session:token", to: "abc123")
प्रदर्शन
SwiftNIO के कारण, RediStack सभी ऑपरेशनों का नॉन-ब्लॉकिंग कार्य सुनिश्चित करता है। यह विशेष रूप से iOS/macOS ऐप्स के लिए महत्वपूर्ण है जहाँ नेटवर्क रिक्वेस्ट के दौरान UI हैंग नहीं होना चाहिए। लाइब्रेरी सपोर्ट करती है:
- एसिंक्रोनस कमांड निष्पादन
- स्वचालित पुनः कनेक्शन
- कनेक्शन पूलिंग
- पूर्ण Redis कमांड सेट