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

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

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

ابدأ الدورة

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



في التطوير الحديث على منصة .NET، غالبًا ما تنشأ الحاجة إلى تخزين مؤقت سريع للبيانات، أو تنظيم قوائم انتظار الرسائل، أو إدارة الجلسات. أحد أفضل الحلول لهذه المهام هو استخدام Redis — مخزن بيانات عالي الأداء من نوع "مفتاح-قيمة". للتفاعل مع Redis من C# (.NET)، المكتبة الأكثر شيوعًا وموثوقية هي StackExchange.Redis.



ما هو StackExchange.Redis؟



StackExchange.Redis هي مكتبة عميل مفتوحة المصدر، طورتها شركة Stack Overflow. توفر مجموعة كاملة من الوظائف للعمل مع Redis: من العمليات البسيطة GET/SET إلى السيناريوهات المعقدة مع النشر/الاشتراك (Pub/Sub)، والمعاملات، ونصوص Lua. المكتبة محسّنة للتطبيقات متعددة الخيوط وتدعم العمليات غير المتزامنة، مما يجعلها خيارًا مثاليًا للخدمات عالية التحميل على C#.



التثبيت



يمكن تثبيت المكتبة عبر NuGet Package Manager. نفذ الأمر في وحدة تحكم مدير الحزم:



Install-Package StackExchange.Redis


أو عبر .NET CLI:



dotnet add package StackExchange.Redis


بعد التثبيت، يمكنك الاتصال بخادم Redis باستخدام سلسلة الاتصال:



using StackExchange.Redis;

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");IDatabase db = redis.GetDatabase();


الإمكانيات الأساسية وأمثلة الكود



1. العمليات الأساسية على المفاتيح



السيناريو الأكثر شيوعًا هو حفظ واسترجاع القيم. مثال على العمل مع السلاسل النصية:



// كتابة البياناتdb.StringSet("user:1:name", "أليكسي");db.StringSet("user:1:email", "alex@example.com");

// قراءة البياناتstring name = db.StringGet("user:1:name");string email = db.StringGet("user:1:email");

Console.WriteLine($"الاسم: {name}, البريد الإلكتروني: {email}");


2. العمل مع التجزئات (Hashes)



يدعم Redis بنية بيانات "التجزئة"، وهي مناسبة لتخزين الكائنات:



// كتابة تجزئةHashEntry[] user = new HashEntry[]{    new HashEntry("name", "ماريا"),    new HashEntry("age", 28),    new HashEntry("city", "موسكو")};db.HashSet("user:2", user);

// قراءة جميع الحقولHashEntry[] loadedUser = db.HashGetAll("user:2");foreach (var entry in loadedUser){ Console.WriteLine($"{entry.Name}: {entry.Value}");}


3. التخزين المؤقت مع وقت البقاء (TTL)



إحدى الوظائف الرئيسية لـ Redis هي الحذف التلقائي للبيانات القديمة. قم بتعيين TTL (وقت البقاء) للمفتاح:



// تخزين البيانات مؤقتًا لمدة 10 دقائقdb.StringSet("cache:weather", "مشمس، +22°م", TimeSpan.FromMinutes(10));

// التحقق من وقت البقاءTimeSpan? ttl = db.KeyTimeToLive("cache:weather");Console.WriteLine($"المتبقي: {ttl?.TotalSeconds} ثانية");


4. النشر والاشتراك (Pub/Sub)



قم بتنفيذ تبادل الرسائل في الوقت الفعلي. مثال على المشترك:



// إنشاء مشتركISubscriber subscriber = redis.GetSubscriber();subscriber.Subscribe("notifications", (channel, message) =>{    Console.WriteLine($"تم استلام إشعار: {message}");});

// نشر رسالةsubscriber.Publish("notifications", "مرحبًا بالعالم!");


5. المعاملات



تنفيذ عدة عمليات بشكل ذري:



ITransaction transaction = db.CreateTransaction();transaction.AddCondition(Condition.KeyNotExists("counter:lock"));transaction.StringSetAsync("counter:lock", "1");transaction.StringIncrementAsync("counter:value");

// تأكيد المعاملةbool committed = transaction.Execute();Console.WriteLine(committed ? "تم تنفيذ المعاملة" : "رفض");


مزايا StackExchange.Redis



  • أداء عالٍ

توصيات