عميل Redis لتطبيقات Swift (iOS/macOS) – RediStack

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

RediStack: عميل Redis غير متزامن لتطبيقات Swift (iOS/macOS)

\n\n

RediStack هو عميل حديث وغير متزامن بالكامل لـ Redis، مكتوب بلغة Swift. تم بناؤه على أساس إطار العمل عالي الأداء SwiftNIO، مما يسمح بالعمل بكفاءة مع طلبات الشبكة دون حظر الخيط الرئيسي. المكتبة مثالية لتطبيقات iOS وmacOS التي تتطلب التخزين المؤقت، أو إدارة قوائم الانتظار، أو Pub/Sub.

\n\n

يدعم RediStack جميع إمكانيات Redis الأساسية: السلاسل النصية، التجزئة (Hashes)، القوائم، المجموعات، المعاملات، الخطوط الأنابيب (pipeline)، والنشر/الاشتراك (Pub/Sub). المكتبة قيد التطوير النشط ويتم دعمها من قبل مجتمع Swift.

\n\n

التثبيت

\n

أضف RediStack إلى مشروعك عبر 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

لـ CocoaPods استخدم:

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

الاتصال الأساسي

\n

أنشئ اتصالاً بخادم Redis باستخدام 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

العمل مع البيانات

\n

أمثلة على العمليات الأساسية:

\n
// تعيين قيمة\ntry await connection.set("user:1:name", to: "أليكسي")\ntry await connection.set("user:1:age", to: 30)\n\n// الحصول على قيمة\nlet name: String? = try await connection.get("user:1:name")\nprint(name ?? "غير موجود") // سيطبع: أليكسي\n\n// العمل مع التجزئة (Hashes)\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// الزيادة (Increment)\nlet newCount = try await connection.increment("page:views")\nprint("عدد المشاهدات: \\(newCount)")\n
\n\n

المعاملات والخطوط الأنابيب

\n

يدعم RediStack الخطوط الأنابيب (pipeline) لإرسال أوامر متعددة دفعة واحدة:

\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 – مصفوفة من الردود بترتيب الأوامر\n
\n\n

للمعاملات استخدم 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 (النشر والاشتراك)

\n

يدعم RediStack الاشتراكات غير المتزامنة في القنوات:

\n
// الاشتراك في قناة\nlet subscriber = connection.subscribe(to: "updates") { event in\n    switch event {\n    case .message(let channel, let message):\n        print("تم الاستلام من \\(channel): \\(message)")\n    default:\n        break\n    }\n}\n\n// نشر رسالة\ntry await connection.publish("مرحباً بالجميع!", to: "updates")\n
\n\n

معالجة الأخطاء وإعادة الاتصال

\n

لتطبيقات الإنتاج، من المهم معالجة انقطاع الاتصال. يوفر RediStack آليات إعادة الاتصال عبر 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// استخدم pool كاتصال عادي\ntry await pool.set("session:token", to: "abc123")\n
\n\n

الأداء

\n

بفضل SwiftNIO، يضمن RediStack تشغيلاً غير محظور لجميع العمليات. هذا مهم بشكل خاص لتطبيقات iOS/mac

توصيات