عميل 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\nStackExchange.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\ndotnet add package StackExchange.Redis\n\nأو عبر NuGet:
\n\nInstall-Package StackExchange.Redis\n\nبعد التثبيت الناجح، يظهر مرجع للتجميع (Assembly) في المشروع، ويمكن البدء في العمل مع Redis.
\n\nالاتصال بخادم Redis
\n\nالفئة الرئيسية للتفاعل هي ConnectionMultiplexer. وهي تدير الاتصالات بـ Redis وتتعامل تلقائيًا مع إعادة الاتصال، أخطاء الشبكة، والتبديل إلى النسخ المتماثلة (Replicas).
مثال على إنشاء اتصال:
\n\nusing 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 القياسية.
العمل مع السلاسل النصية (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