عميل Redis لـ C# (.NET): StackExchange.Redis — الاتصال والأمثلة

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

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

ابدأ الدورة

عميل Redis لـ C# (.NET): StackExchange.Redis

\n\n

في التطوير الحديث على منصة .NET، غالبًا ما تنشأ الحاجة لاستخدام أنظمة تخزين مؤقت عالية الأداء ووسطاء الرسائل. أحد أكثر الحلول شيوعًا هو Redis — مخزن بيانات في الذاكرة (in-memory) يعمل وفق مبدأ «مفتاح-قيمة». للتفاعل مع Redis من C# (.NET)، توجد مكتبة قوية ومختبرة تدعى StackExchange.Redis. تم تطويرها بواسطة شركة Stack Exchange (مؤلفو Stack Overflow) وتدعم جميع إمكانيات Redis الأساسية، بما في ذلك التجميع (Clustering)، النسخ المتماثل (Replication)، و Pub/Sub.

\n\n

ما هو StackExchange.Redis؟

\n\n

StackExchange.Redis هو عميل عالي الأداء وغير متزامن (Async) لـ Redis، مكتوب بلغة C#. المكتبة محسّنة للعمل مع عدد كبير من الاتصالات المتزامنة وتدعم تعدد الإرسال (Multiplexing) — حيث يمكن لاتصال واحد خدمة العديد من الطلبات المتوازية دون حظر. وهذا يجعلها الخيار المثالي للتطبيقات عالية التحميل على .NET Core، .NET 5/6/7/8 و .NET Framework.

\n\n

تثبيت المكتبة

\n\n

يتم تثبيت StackExchange.Redis عبر NuGet Package Manager. الطريقة الأسهل هي استخدام وحدة تحكم مدير الحزم في Visual Studio أو dotnet CLI.

\n\n
dotnet add package StackExchange.Redis
\n\n

أو عبر NuGet:

\n\n
Install-Package StackExchange.Redis
\n\n

بعد التثبيت الناجح، يظهر مرجع للتجميع (Assembly) في المشروع، ويمكن البدء في العمل مع Redis.

\n\n

الاتصال بخادم Redis

\n\n

الفئة الرئيسية للتفاعل هي ConnectionMultiplexer. وهي تدير الاتصالات بـ Redis وتتعامل تلقائيًا مع إعادة الاتصال، أخطاء الشبكة، والتبديل إلى النسخ المتماثلة (Replicas).

\n\n

مثال على إنشاء اتصال:

\n\n
using StackExchange.Redis;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        // سلسلة اتصال لـ Redis المحلي\n        string connectionString = "localhost:6379";\n        \n        // إنشاء الملتقى (Multiplexer)\n        using var redis = await ConnectionMultiplexer.ConnectAsync(connectionString);\n        \n        // الحصول على قاعدة البيانات (الافتراضية db=0)\n        IDatabase db = redis.GetDatabase();\n        \n        // التحقق من الاتصال\n        bool isConnected = db.Ping().TotalSeconds < 2;\n        Console.WriteLine($"Connected: {isConnected}");\n    }\n}
\n\n

يمكن أن تحتوي سلسلة الاتصال على كلمة مرور، منفذ، إعدادات SSL وخيارات أخرى. على سبيل المثال، للاتصال بـ Redis على خادم بعيد بكلمة مرور:

\n\n
"myredis.cloud.com:6380,password=secret123,ssl=true"
\n\n

العمليات الأساسية مع البيانات

\n\n

بعد الحصول على مثيل IDatabase، يمكن تنفيذ جميع عمليات Redis القياسية.

\n\n

العمل مع السلاسل النصية (Strings)

\n\n
// كتابة سلسلة نصية\nawait db.StringSetAsync("user:1:name", "أليكسي");\n\n// قراءة سلسلة نصية\nstring name = await db.StringGetAsync("user:1:name");\nConsole.WriteLine(name); // سيطبع: أليكسي\n\n// زيادة عداد\nawait db.StringIncrementAsync("page:visits", 1);
\n\n

العمل مع التجزئة (Hashes)

\n\n
// تعيين حقول التجزئة\nHashEntry[] userData = {\n    new HashEntry("name", "ماريا"),\n    new HashEntry("age", 28),\n    new HashEntry("city", "موسكو")\n};\nawait db.HashSetAsync("user:2", userData);\n\n// الحصول على حقل واحد\nstring city = await db.HashGetAsync("user:2", "city");\nConsole.WriteLine(city); // موسكو\n\n// الحصول على جميع حقول التجزئة\nvar allFields = await db.HashGetAllAsync("user:2");\nforeach (var field in allFields)\n{\n    Console.WriteLine($"{field.Name}: {field.Value}");\n}
\n\n

العمل مع القوائم (Lists)

\n\n
// إضافة عناصر إلى القائمة (من اليسار)\nawait db.ListLeftPushAsync("notifications", "الإشعار الأول");\nawait db.ListLeftPushAsync("notifications", "الإشعار الثاني");\n\n// الحصول على جميع عناصر القائمة\nvar                    

توصيات