StackExchange.Redis لـ C# (.NET): دليل شامل مع أمثلة
1. ما هي هذه المكتبة ولماذا تحتاجها؟
StackExchange.Redis هي عميل عالي الأداء وغير متزامن (Async) للتعامل مع Redis، طورها فريق StackOverflow. تُعتبر المكتبة المعيارية الفعلية للعمل مع Redis في بيئة .NET. وهي متوافقة مع .NET Framework 4.6+ و .NET Core/.NET 5+.
لماذا تحتاجها؟ Redis هي قاعدة بيانات تخزين في الذاكرة (In-Memory) تُستخدم غالبًا كذاكرة تخزين مؤقت (Cache)، وسيط رسائل (Pub/Sub)، وقائمة مهام، أو قاعدة بيانات NoSQL عالية الأداء. توفر StackExchange.Redis واجهة برمجية (API) سهلة لكل هذه السيناريوهات: إدارة النصوص (Strings)، والتجزئات (Hashes)، والقوائم (Lists)، والمجموعات (Sets)، والمعاملات (Transactions)، وسكربتات Lua، والبث المباشر للبيانات، وغيرها. بدون هذه المكتبة، ستحتاج لكتابة كود منخفض المستوى للتعامل مع المقابس (Sockets) وبروتوكول Redis (RESP).
الميزة الأساسية للمكتبة هي اللاتزامنية وتعدد الخيوط. تستخدم ConnectionMultiplexer وهو كائن واحد ومشترك لجميع الاتصالات بخادم Redis. هذا يسمح باستخدام المقابس بكفاءة وتجنب إنشاء اتصالات متعددة. تدعم المكتبة بالكامل Redis Cluster و Sentinel والتكرار (Replication).
2. التثبيت
يتم التثبيت عبر NuGet Package Manager. نفذ أحد الأوامر التالية في وحدة تحكم مدير الحزم (Package Manager Console) أو في terminal الخاص بـ .NET CLI:
// عبر .NET CLI
dotnet add package StackExchange.Redis
// عبر Package Manager Console
Install-Package StackExchange.Redis
بعد التثبيت، أضف التوجيه using في الكود الخاص بك:
using StackExchange.Redis;
3. بداية سريعة — مثال عملي بسيط
فيما يلي مثال بسيط يتصل بخادم Redis محلي، يكتب نصًا ويقرأه مرة أخرى:
using StackExchange.Redis;
// إنشاء ConnectionMultiplexer (نقطة الدخول لجميع العمليات)
// استبدل "localhost:6379" بعنوان خادم Redis الخاص بك
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");
// الحصول على قاعدة البيانات (الافتراضية db 0)
IDatabase db = redis.GetDatabase();
// كتابة قيمة
bool setResult = db.StringSet("mykey", "مرحبًا، Redis!");
Console.WriteLine($"نتيجة الكتابة: {setResult}");
// قراءة القيمة
RedisValue value = db.StringGet("mykey");
Console.WriteLine($"نتيجة القراءة: {value}");
// إغلاق الاتصال (عادةً غير مطلوب إذا كنت تستخدم using)
redis.Close();
هام: ConnectionMultiplexer هو كائن طويل العمر. يجب إنشاؤه مرة واحدة طوال عمر التطبيق (مثل Singleton في حاوية DI). لا تنشئ ConnectionMultiplexer جديدًا لكل طلب!
4. أهم الدوال/الكلاسات
4.1. ConnectionMultiplexer.Connect()
التوقيع: public static ConnectionMultiplexer Connect(string configuration)
الوظيفة: تنشئ وتعيد مثيلًا جديدًا من ConnectionMultiplexer الذي يدير جميع الاتصالات بـ Redis. تقبل سلسلة تكوين (عنوان، منفذ، كلمة مرور، مهلات، إلخ).
مثال:
var redis = ConnectionMultiplexer.Connect("myredisserver.com:6379,password=secret,connectTimeout=5000");
4.2. IDatabase.StringSet()
التوقيع: bool StringSet(RedisKey key, RedisValue value, TimeSpan? expiry = null, When when = When.Always)
الوظيفة: تعيين قيمة لمفتاح معين. يمكن أن تقبل وقت حياة اختياري (expiry) وشرط التعيين (فقط إذا كان المفتاح موجودًا، غير موجود، إلخ).
مثال:
IDatabase db = redis.GetDatabase();
db.StringSet("user:1", "أحمد", TimeSpan.FromMinutes(10));
أيضاً في المكتبة
عميل Redis لـ PHP: Predis — التثبيت، الاتصال، الأمثلة
تحديد معدل الطلبات في Java: المكتبات والخوارزميات والتنفيذ
عميل Elasticsearch لـ PHP: elasticsearch-php. دليل كامل
الجغرافيا المكانية والخرائط في Kotlin: المكتبات والأدوات والأمثلة
التحقق من صحة البيانات في Kotlin: المكتبات، الأساليب وأمثلة الكود