Redis-rs في Rust: دليل شامل مع أمثلة عملية

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

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

ابدأ الدورة

ما هي مكتبة Redis-rs ولماذا تحتاجها؟

Redis-rs هي مكتبة عميل خادم Redis غير متزامنة ومتزامنة، مكتوبة بلغة Rust. تُعتبر واحدة من أشهر المكتبات وأكثرها دعماً للعمل مع Redis في نظام Rust البيئي. توفر واجهة سهلة وآمنة وعالية الأداء للتفاعل مع خادم Redis.

لماذا تحتاج إلى Redis-rs؟

  • أداء عالٍ: تشتهر Rust بسرعتها وأمان الذاكرة. ترث Redis-rs هذه الصفات، مما يضمن أقل تكلفة إضافية عند العمل مع Redis.
  • غير متزامن: صُممت المكتبة أصلاً للعمل مع بيئات التشغيل غير المتزامنة مثل Tokio و async-std، مما يسمح بمعالجة آلاف الاتصالات دون حظر الخيوط.
  • أمان الأنواع: يساعد نظام الأنواع الصارم في Rust على تجنب العديد من الأخطاء في مرحلة الترجمة. تستفيد Redis-rs من هذه الميزة بتوفير أوامر محددة الأنواع.
  • دعم المجموعات والتكرار: تدعم المكتبة العمل مع مجموعات Redis، وإعادة توجيه الطلبات تلقائياً، والعمل مع النسخ المكررة.
  • مجتمع نشط: تمتلك Redis-rs قاعدة كبيرة من المطورين، ويتم تحديثها بانتظام وتوثيقها بشكل جيد.

هذه المكتبة مثالية لبناء تطبيقات ويب عالية التحميل، وأنظمة التخزين المؤقت، وقوائم انتظار الرسائل، ومخازن الجلسات، وأي مشاريع أخرى تتطلب وصولاً سريعاً إلى البيانات عبر Redis.

تثبيت مكتبة Redis-rs

لتثبيت Redis-rs في مشروع Rust الخاص بك، أضف التبعية إلى ملف Cargo.toml:

[dependencies]
redis = "0.27.0"  # تحقق من أحدث إصدار على crates.io
tokio = { version = "1.0", features = ["full"] }  # للتنفيذ غير المتزامن

ثم نفذ الأمر التالي:

cargo build

إذا كنت تخطط لاستخدام العميل المتزامن، فلن تحتاج إلى Tokio، لكنه ضروري للعميل غير المتزامن.

بداية سريعة مع مثال برمجي

لنكتب برنامجاً بسيطاً يتصل بـ Redis، ويكتب قيمة، ثم يقرأها مرة أخرى.

use redis::AsyncCommands;
use tokio;

#[tokio::main]
async fn main() -> redis::RedisResult<()> {
    // إنشاء اتصال بخادم Redis
    let client = redis::Client::open("redis://127.0.0.1:6379/")?;
    let mut con = client.get_async_connection().await?;

    // تعيين مفتاح "hello" بقيمة "world"
    con.set("hello", "world").await?;

    // الحصول على قيمة المفتاح "hello"
    let value: String = con.get("hello").await?;
    println!("قيمة المفتاح 'hello': {}", value);

    Ok(())
}

يوضح هذا المثال العمل الأساسي مع Redis-rs: الاتصال، وكتابة البيانات، وقراءتها. لاحظ استخدام #[tokio::main] وهو ماكرو يقوم بتشغيل بيئة Tokio غير المتزامنة.

الطرق والوظائف الأساسية في Redis-rs

دعنا نستعرض 10 من أكثر الطرق استخداماً. جميع الأمثلة تفترض أن لديك اتصالاً غير متزامن con تم الحصول عليه عبر client.get_async_connection().await?.

1. set() — تعيين قيمة

الوصف: يعين قيمة للمفتاح المحدد. إذا كان المفتاح موجوداً بالفعل، يتم استبدال القيمة.

المعاملات:

  • key: K — المفتاح (أي نوع يطبق ToRedisArgs)
  • value: V — القيمة (أي نوع يطبق ToRedisArgs)

مثال:

con.set("user:1:name", "أحمد").await?;
con.set("counter", 42).await?;

2. get() — الحصول على قيمة

الوصف: يحصل على قيمة المفتاح المحدد. يُرجع Option<T>، حيث T هو النوع المتوقع.

توصيات