انتقل إلى المحتوى

شرح شامل لمكتبة Redis في Rust


نظرة عامة

redis-rs هي مكتبة Rust للتواصل مع خوادم Redis، تدعم الاتصال المتزامن وغير المتزامن، والعنقود (Cluster)، والحارس (Sentinel)، وPub/Sub، والتيارات (Streams)، والتخزين المؤقت من جانب العميل (Client-side Caching)، ومجموعات المتجهات (Vector Sets)، وWebSocket، وTLS، وMicrosoft Entra ID للمصادقة.


1. الهياكل (Structs)

1.1 الهياكل الجذرية (Core)

الهيكل الشرح
AsyncConnectionConfig تكوين الاتصال غير المتزامن (مثل حجم المخزن المؤقت، إعدادات إعادة المحاولة)
AsyncIter مُكرر غير متزامن لنتائج أوامر Redis (مثل SCAN)
Client عميل Redis الرئيسي — نقطة البداية لإنشاء الاتصالات
ClientCertificateCredentialOptions خيارات مصادقة بشهادة العميل (لـ Entra ID)
ClientSecretCredentialOptions خيارات مصادقة بسر العميل (لـ Entra ID)
ClientTlsConfig تكوين TLS من جانب العميل (شهادات، مفاتيح)
Cmd يمثل أمر Redis واحد قابل للبناء والتنفيذ
CommandCacheConfig تكوين التخزين المؤقت للأوامر
Connection اتصال متزامن بخادم Redis
ConnectionInfo معلومات الاتصال (عنوان، قاعدة بيانات، كلمة مرور)
CopyOptions خيارات أمر COPY (استبدال، قاعدة بيانات الوجهة)
DeveloperToolsCredentialOptions خيارات مصادقة أدوات المطور (لـ Entra ID)
FlushAllOptions خيارات أمر FLUSHALL (متزامن أو غير متزامن)
HashFieldExpirationOptions خيارات انتهاء صلاحية حقول Hash
InfoDict قاموس يُحلل ناتج أمر INFO إلى أزواج مفتاح-قيمة
Iter مُكرر متزامن لنتائج أوامر Redis
LposOptions خيارات أمر LPOS (البحث عن موضع عنصر في قائمة)
MSetOptions خيارات أمر MSET المتعدد
ManagedIdentityCredentialOptions خيارات مصادقة الهوية المُدارة (Azure)
Msg رسالة مُستلمة من قناة Pub/Sub
Parser مُحلل بروتوكول RESP (Redis Serialization Protocol)
ParsingError خطأ أثناء تحليل استجابة Redis
Pipeline أنبوب أوامر — يجمع عدة أوامر لإرسالها دفعة واحدة
PubSub اتصال Pub/Sub متزامن للاشتراك في القنوات
PushInfo معلومات رسالة Push (في بروتوكول RESP3)
RedisConnectionInfo معلومات اتصال Redis (اسم المستخدم، كلمة المرور، قاعدة البيانات)
RedisError نوع الخطأ الرئيسي في المكتبة
ReplicaInfo معلومات عن نسخة (replica) في العنقود
ScanOptions خيارات أمر SCAN (نمط، عدد، نوع)
Script سكريبت Lua مُحمل يمكن تنفيذه على الخادم
ScriptInvocation استدعاء سكريبت Lua مع مفاتيح ومعاملات
ServerError خطأ مُرجع من خادم Redis
SetOptions خيارات أمر SET (انتهاء الصلاحية، شروط الوجود)
SortedSetAddOptions خيارات أمر ZADD (شروط، تعديل السلوك)
TlsCertificates شهادات TLS (شهادة CA، شهادة العميل، المفتاح)

1.2 وحدة الاتصال غير المتزامن (aio)

الهيكل الشرح
aio::ConnectionManager مدير اتصالات يُعيد الاتصال تلقائياً عند الانقطاع
aio::ConnectionManagerConfig تكوين مدير الاتصالات (مهلة، عدد المحاولات)
aio::Monitor اتصال مراقبة يعرض جميع الأوامر المُنفذة على الخادم
aio::MultiplexedConnection اتصال مُتعدد الإرسال — يسمح بإرسال أوامر متعددة متزامنة على اتصال واحد
aio::PubSub اتصال Pub/Sub غير متزامن
aio::PubSubSink طرف الإرسال لاتصال Pub/Sub (اشتراك/إلغاء)
aio::PubSubStream طرف الاستقبال لاتصال Pub/Sub (تيار الرسائل)
aio::SendError خطأ عند فشل إرسال أمر عبر الاتصال
aio::smol::SmolWrapped مُغلف لاستخدام بيئة تشغيل smol بدلاً من Tokio

1.3 وحدة المصادقة (auth)

الهيكل الشرح
auth::BasicAuth مصادقة أساسية (اسم مستخدم وكلمة مرور)

1.4 وحدة إدارة المصادقة (auth_management)

الهيكل الشرح
auth_management::RetryConfig تكوين إعادة المحاولة عند فشل تجديد الرمز
auth_management::TokenRefreshConfig تكوين تجديد رمز المصادقة تلقائياً

1.5 وحدة التخزين المؤقت (caching)

الهيكل الشرح
caching::CacheConfig تكوين التخزين المؤقت من جانب العميل (حجم، مدة الصلاحية)
caching::CacheStatistics إحصائيات التخزين المؤقت (عدد الإصابات، الإخفاقات)

1.6 وحدة العنقود (cluster)

الهيكل الشرح
cluster::ClusterClient عميل عنقود Redis — يتصل بعدة عقد ويوزع الأوامر
cluster::ClusterClientBuilder بانٍ لتكوين عميل العنقود بخيارات مخصصة
cluster::ClusterConfig تكوين العنقود (مهلات، سياسات إعادة المحاولة)
cluster::ClusterConnection اتصال متزامن بعنقود Redis
cluster::ClusterPipeline أنبوب أوامر للعنقود
cluster::NodeAddress عنوان عقدة في العنقود (مضيف ومنفذ)

1.7 وحدة العنقود غير المتزامن (cluster_async)

الهيكل الشرح
cluster_async::ClusterConnection اتصال غير متزامن بعنقود Redis

1.8 وحدة توجيه القراءة في العنقود (cluster_read_routing)

الهيكل الشرح
cluster_read_routing::AnyNodeCandidates مرشحون من أي عقدة (رئيسية أو نسخة)
cluster_read_routing::ClusterTopology طوبولوجيا العنقود (خريطة العقد والشرائح)
cluster_read_routing::RandomReplicaStrategy استراتيجية اختيار نسخة عشوائية للقراءة
cluster_read_routing::Replicas قائمة النسخ المتاحة
cluster_read_routing::ReplicasOnlyCandidates مرشحون من النسخ فقط (لا العقد الرئيسية)
cluster_read_routing::RoundRobinReplicaStrategy استراتيجية اختيار النسخ بالتناوب
cluster_read_routing::Shard شريحة (shard) في العنقود تحتوي على نطاق فتحات (slots)

1.9 وحدة توجيه العنقود (cluster_routing)

الهيكل الشرح
cluster_routing::Route مسار توجيه يُحدد العقدة المستهدفة لأمر
cluster_routing::Slot فتحة (slot) في العنقود مع عنوان العقدة المسؤولة

1.10 وحدة Entra ID (entra_id)

الهيكل الشرح
entra_id::ClientCertificate شهادة عميل لمصادقة Entra ID
entra_id::EntraIdCredentialsProvider مزود بيانات اعتماد Microsoft Entra ID

1.11 وحدة الإحداثيات الجغرافية (geo)

الهيكل الشرح
geo::Coord إحداثيات جغرافية (خط طول وعرض)
geo::RadiusOptions خيارات البحث بالنطاق الجغرافي (الترتيب، العدد، الإحداثيات)
geo::RadiusSearchResult نتيجة بحث جغرافي (العضو، المسافة، الإحداثيات)

1.12 وحدة إعدادات TCP (io::tcp)

الهيكل الشرح
io::tcp::TcpSettings إعدادات اتصال TCP (keepalive، nodelay، مهلة)

1.13 وحدة الحارس (sentinel)

الهيكل الشرح
sentinel::LockedSentinelClient عميل حارس مُقفل (thread-safe)
sentinel::Sentinel اتصال بنظام Redis Sentinel للاكتشاف التلقائي للرئيسي
sentinel::SentinelClient عميل يتصل عبر Sentinel ويتبع الرئيسي تلقائياً
sentinel::SentinelClientBuilder بانٍ لتكوين عميل Sentinel
sentinel::SentinelNodeConnectionInfo معلومات اتصال عقدة Sentinel

1.14 وحدة التيارات (streams)

الهيكل الشرح
streams::StreamAddOptions خيارات أمر XADD (معرف، حد أقصى، idempotency)
streams::StreamAutoClaimOptions خيارات أمر XAUTOCLAIM (استرداد الرسائل المعلقة تلقائياً)
streams::StreamAutoClaimReply نتيجة XAUTOCLAIM
streams::StreamClaimOptions خيارات أمر XCLAIM (استرداد رسائل معلقة)
streams::StreamClaimReply نتيجة XCLAIM
streams::StreamConfigOptions خيارات تكوين التيار
streams::StreamId معرف رسالة في التيار (طابع زمني + تسلسل)
streams::StreamInfoConsumer معلومات مستهلك في مجموعة
streams::StreamInfoConsumersReply نتيجة XINFO CONSUMERS
streams::StreamInfoGroup معلومات مجموعة مستهلكين
streams::StreamInfoGroupsReply نتيجة XINFO GROUPS
streams::StreamInfoStreamReply نتيجة XINFO STREAM
streams::StreamInfoStreamReplyWithIdempotency نتيجة XINFO STREAM مع معلومات idempotency
streams::StreamKey مفتاح تيار مع رسائله
streams::StreamPendingCountReply نتيجة XPENDING مع عدد
streams::StreamPendingData بيانات رسالة معلقة (معرف، مستهلك، وقت)
streams::StreamPendingId معرف رسالة معلقة
streams::StreamRangeReply نتيجة XRANGE/XREVRANGE
streams::StreamReadOptions خيارات أمر XREAD/XREADGROUP
streams::StreamReadReply نتيجة XREAD
streams::StreamTrimOptions خيارات تقليم التيار

1.15 وحدة مجموعات المتجهات (vector_sets)

الهيكل الشرح
vector_sets::VAddOptions خيارات أمر VADD (إضافة متجه لمجموعة)
vector_sets::VEmbOptions خيارات التضمين (embedding) للمتجهات
vector_sets::VSimOptions خيارات البحث بالتشابه (similarity search)

1.16 وحدة ACL (acl)

الهيكل الشرح
acl::AclInfo معلومات قائمة التحكم بالوصول (ACL) لمستخدم

2. التعدادات (Enums)

2.1 تعدادات جذرية

التعداد الشرح
Arg معامل أمر Redis (نص، بايتات، أو عدد)
ConnectionAddr نوع عنوان الاتصال (TCP، TLS، أو Unix socket)
ControlFlow التحكم في تدفق الاشتراك (متابعة أو إيقاف)
Direction اتجاه العملية (يسار أو يمين — لأوامر القوائم)
ErrorKind أنواع أخطاء Redis (IO، مصادقة، عنقود، بروتوكول، إلخ)
ExistenceCheck شرط وجود المفتاح (NX: غير موجود، XX: موجود)
ExpireOption خيارات انتهاء الصلاحية (NX, XX, GT, LT)
Expiry مدة انتهاء الصلاحية (ثوانٍ، ميلي ثانية، طابع زمني)
FieldExistenceCheck شرط وجود حقل في Hash
IntegerReplyOrNoOp استجابة عدد صحيح أو عدم تنفيذ
NumericBehavior سلوك القيم العددية (عدد صحيح أو عشري)
ProtocolVersion إصدار بروتوكول Redis (RESP2 أو RESP3)
PushKind نوع رسالة Push (اشتراك، رسالة، إبطال تخزين مؤقت)
RetryMethod طريقة إعادة المحاولة عند الفشل
Role دور العقدة (رئيسية أو نسخة)
ServerErrorKind نوع خطأ الخادم (MOVED, ASK, BUSY, إلخ)
SetExpiry انتهاء صلاحية أمر SET (EX, PX, EXAT, PXAT, KEEPTTL)
TlsMode وضع TLS (آمن أو غير آمن)
UpdateCheck شرط التحديث (GT: أكبر، LT: أصغر)
UserAssignedId معرف هوية مُعينة للمستخدم (Azure)
Value قيمة Redis (نص، عدد، بايتات، مصفوفة، خريطة، Null، إلخ)
ValueComparison مقارنة بين قيمتين
ValueType نوع قيمة Redis (String, List, Set, Hash, ZSet, Stream)
VerbatimFormat صيغة النص الحرفي في RESP3 (txt, mkd)

2.2 تعدادات ACL

التعداد الشرح
acl::Rule قاعدة ACL (سماح/منع أوامر، مفاتيح، قنوات)

2.3 تعدادات التخزين المؤقت

التعداد الشرح
caching::CacheMode وضع التخزين المؤقت (بث أو إبطال)

2.4 تعدادات توجيه القراءة

التعداد الشرح
cluster_read_routing::ReadCandidates مرشحو القراءة (أي عقدة، نسخ فقط، مخصص)

2.5 تعدادات توجيه العنقود

التعداد الشرح
cluster_routing::AggregateOp عملية تجميع النتائج من عدة عقد (أول، أخير، مجموع، أدنى، أقصى)
cluster_routing::LogicalAggregateOp عملية تجميع منطقية (AND, OR)
cluster_routing::MultiSlotArgPattern نمط معاملات متعددة الفتحات
cluster_routing::MultipleNodeRoutingInfo معلومات توجيه لعدة عقد
cluster_routing::ResponsePolicy سياسة معالجة الاستجابات من عدة عقد
cluster_routing::RoutingInfo معلومات التوجيه لأمر (عقدة واحدة أو عدة عقد)
cluster_routing::SingleNodeRoutingInfo معلومات توجيه لعقدة واحدة
cluster_routing::SlotAddr عنوان الفتحة (رئيسي أو نسخة)

2.6 تعدادات جغرافية

التعداد الشرح
geo::RadiusOrder ترتيب نتائج البحث الجغرافي (تصاعدي أو تنازلي بالمسافة)
geo::Unit وحدة المسافة (متر، كيلومتر، ميل، قدم)

2.7 تعدادات الحارس

التعداد الشرح
sentinel::SentinelServerType نوع الخادم المطلوب من Sentinel (رئيسي أو نسخة)

2.8 تعدادات التيارات

التعداد الشرح
streams::StreamDeletionPolicy سياسة حذف الرسائل
streams::StreamIdempotencyMode وضع عدم التكرار (idempotency)
streams::StreamMaxlen الحد الأقصى لطول التيار (دقيق أو تقريبي)
streams::StreamPendingReply نتيجة XPENDING (ملخص أو تفصيل)
streams::StreamTrimStrategy استراتيجية التقليم (MAXLEN أو MINID)
streams::StreamTrimmingMode وضع التقليم (دقيق أو تقريبي ~)
streams::XAckDelStatusCode رمز حالة XACK/XDEL
streams::XDelExStatusCode رمز حالة XDELEX

2.9 تعدادات مجموعات المتجهات

التعداد الشرح
vector_sets::EmbeddingInput مدخل التضمين (نص أو متجه)
vector_sets::VectorAddInput مدخل إضافة متجه (قيم عددية أو نص)
vector_sets::VectorQuantization نوع التكميم (Q8, BF16, FP32)
vector_sets::VectorSimilaritySearchInput مدخل البحث بالتشابه

3. السمات (Traits)

3.1 سمات الأوامر

السمة الشرح
AsyncCommands أوامر Redis غير المتزامنة (get, set, del, إلخ) — تُستخدم مع await
AsyncTypedCommands أوامر غير متزامنة مع تحويل أنواع تلقائي
Commands أوامر Redis المتزامنة
ConnectionLike السمة الأساسية لأي اتصال Redis (إرسال أوامر، التحقق من الحالة)
TypedCommands أوامر متزامنة مع تحويل أنواع تلقائي

3.2 سمات التحويل

السمة الشرح
FromRedisValue تحويل قيمة Redis إلى نوع Rust (مثل String, i64, Vec)
IntoConnectionInfo تحويل قيمة إلى معلومات اتصال (من URL أو هيكل)
RedisWrite كتابة بيانات بصيغة بروتوكول Redis
ToRedisArgs تحويل نوع Rust إلى معاملات أمر Redis
ToSingleRedisArg تحويل نوع Rust إلى معامل Redis واحد

3.3 سمات JSON

السمة الشرح
JsonAsyncCommands أوامر وحدة RedisJSON غير المتزامنة (JSON.GET, JSON.SET, إلخ)
JsonCommands أوامر وحدة RedisJSON المتزامنة

3.4 سمات Pub/Sub

السمة الشرح
PubSubCommands أوامر الاشتراك والنشر

3.5 سمات الاتصال غير المتزامن

السمة الشرح
aio::AsyncPushSender إرسال رسائل Push غير متزامنة
aio::AsyncStream تيار I/O غير متزامن (قراءة + كتابة)
aio::ConnectionLike السمة الأساسية للاتصال غير المتزامن

3.6 سمات المصادقة

السمة الشرح
auth::StreamingCredentialsProvider مزود بيانات اعتماد متجدد (يُرسل تحديثات تلقائية)

3.7 سمات العنقود

السمة الشرح
cluster::Connect سمة إنشاء اتصال متزامن بعقدة عنقود
cluster_async::Connect سمة إنشاء اتصال غير متزامن بعقدة عنقود

3.8 سمات توجيه القراءة

السمة الشرح
cluster_read_routing::ReadRoutingStrategy استراتيجية اختيار العقدة للقراءة
cluster_read_routing::ReadRoutingStrategyFactory مصنع استراتيجيات توجيه القراءة

3.9 سمات DNS

السمة الشرح
io::AsyncDNSResolver مُحلل DNS غير متزامن مخصص

4. الدوال (Functions)

الدالة الشرح
aio::prefer_smol تُفضل بيئة تشغيل smol للاتصالات غير المتزامنة
aio::prefer_tokio تُفضل بيئة تشغيل Tokio للاتصالات غير المتزامنة
aio::transaction_async تُنفذ معاملة (transaction) غير متزامنة مع WATCH/MULTI/EXEC
calculate_value_digest تحسب بصمة (digest) لقيمة Redis
cluster::cluster_pipe تُنشئ أنبوب أوامر للعنقود
cmd تُنشئ أمر Redis جديد من اسمه (مثل cmd("GET"))
from_redis_value تُحول قيمة Redis إلى نوع Rust (نسخة مملوكة)
from_redis_value_ref تُحول مرجع قيمة Redis إلى نوع Rust
is_valid_16_bytes_hex_digest تتحقق من صحة بصمة hex بطول 16 بايت
make_extension_error تُنشئ خطأ امتداد مخصص
pack_command تُحزم أمر Redis بصيغة بروتوكول RESP
parse_redis_url تُحلل URL اتصال Redis إلى مكوناته
parse_redis_value تُحلل استجابة Redis من بايتات خام
parse_redis_value_async تُحلل استجابة Redis بشكل غير متزامن من تيار
pipe تُنشئ أنبوب أوامر (Pipeline) جديد
transaction تُنفذ معاملة متزامنة مع WATCH/MULTI/EXEC

5. أسماء الأنواع المستعارة (Type Aliases)

الاسم المستعار الشرح
FlushDbOptions خيارات أمر FLUSHDB (اسم مستعار لـ FlushAllOptions)
RedisFuture مستقبل Redis — Pin<Box<dyn Future<Output = RedisResult<T>>>>
RedisResult نتيجة Redis — Result<T, RedisError>

6. الثوابت (Constants)

6.1 ثوابت Entra ID

الثابت الشرح
entra_id::REDIS_SCOPE_DEFAULT النطاق الافتراضي لمصادقة Redis عبر Entra ID

6.2 ثوابت التيارات

الثابت الشرح
streams::IDMP_DURATION_MAX الحد الأقصى لمدة عدم التكرار
streams::IDMP_DURATION_MIN الحد الأدنى لمدة عدم التكرار
streams::IDMP_MAXSIZE_MAX الحد الأقصى لحجم عدم التكرار
streams::IDMP_MAXSIZE_MIN الحد الأدنى لحجم عدم التكرار

ملخص

تُقدم مكتبة redis-rs واجهة شاملة للتواصل مع Redis في Rust، وتتضمن:

  • اتصال أساسي — متزامن وغير متزامن مع دعم TLS وUnix sockets
  • عنقود Redis (cluster) — توزيع الأوامر تلقائياً على العقد المناسبة مع إعادة التوجيه
  • حارس Redis (sentinel) — اكتشاف تلقائي للعقدة الرئيسية وتجاوز الأعطال
  • Pub/Sub — نشر واشتراك في القنوات بشكل متزامن وغير متزامن
  • تيارات (streams) — دعم كامل لـ Redis Streams مع مجموعات المستهلكين
  • مجموعات المتجهات (vector_sets) — بحث بالتشابه باستخدام المتجهات
  • تخزين مؤقت (caching) — تخزين مؤقت من جانب العميل مع إبطال تلقائي
  • جغرافي (geo) — أوامر البحث الجغرافي
  • JSON — دعم وحدة RedisJSON
  • ACL — إدارة قوائم التحكم بالوصول
  • سكريبتات Lua — تحميل وتنفيذ سكريبتات على الخادم
  • أنابيب (Pipeline) — تجميع الأوامر لتقليل زمن الشبكة
  • معاملات (Transaction) — تنفيذ ذري لمجموعة أوامر
  • مصادقة Azure Entra ID — دعم مصادقة السحابة