مجموعات Redis (الجزء 1)

المجموعة هي مجموعة غير مرتبة من السلاسل الفريدة. يغطي هذا الدرس عمليات المجموعات الأساسية.

ما هي المجموعة؟

المجموعة تشبه:

ميزات المجموعة:

الأوامر الأساسية

SADD: إضافة عناصر

REDIS
# إضافة عنصر واحد
SADD myset "a"
(integer) 1

# إضافة عناصر متعددة
SADD myset "b" "c" "d"
(integer) 3

# إضافة عنصر موجود (يُرجع 0، لا تكرار)
SADD myset "a"
(integer) 0

SMEMBERS: الحصول على جميع العناصر

REDIS
SMEMBERS myset
1) "a"
2) "b"
3) "c"
4) "d"
⚠️ ملاحظة: SMEMBERS يُرجع جميع العناصر مرة واحدة. لمجموعات البيانات الكبيرة، قد يحظر. استخدم SSCAN في الإنتاج.

SISMEMBER: التحقق من وجود عنصر

REDIS
SISMEMBER myset "a"
(integer) 1

SISMEMBER myset "z"
(integer) 0

SCARD: الحصول على حجم المجموعة

REDIS
SCARD myset
(integer) 4

SREM: إزالة العناصر

REDIS
SREM myset "a"
(integer) 1

SREM myset "z"
(integer) 0

SPOP: إخراج عناصر عشوائية

REDIS
# إخراج عنصر عشوائي واحد
SPOP myset
"b"

# إخراج عنصرين عشوائيين
SPOP myset 2
1) "c"
2) "d"

SRANDMEMBER: الحصول على عناصر عشوائية (دون إزالة)

REDIS
SADD myset2 "x" "y" "z"

# الحصول على عنصر عشوائي واحد
SRANDMEMBER myset2
"x"

# الحصول على عنصرين عشوائيين مختلفين
SRANDMEMBER myset2 2
1) "y"
2) "z"

# الحصول على عنصرين عشوائيين (قد يتكرران)
SRANDMEMBER myset2 -2
1) "x"
2) "x"

حالات الاستخدام

السيناريو الوصف
نظام العلامات علامات المستخدم، علامات المقالات
العلاقات الاجتماعية قوائم الأصدقاء، قوائم المتابعة
إزالة التكرار عدادات فريدة، إحصاءات UV
اليانصيب سحب فائزين عشوائيًا

مثال:نظام العلامات

BASH
# إضافة علامات إلى مقالة
SADD article:123:tags "redis" "database" "nosql"

# الحصول على جميع علامات المقالة
SMEMBERS article:123:tags

# التحقق مما إذا كانت المقالة تحتوي على علامة محددة
SISMEMBER article:123:tags "redis"

# إزالة علامة
SREM article:123:tags "nosql"
▶ جرّب الكود

مثال:الأصدقاء المشتركون

BASH
# أصدقاء المستخدم 1
SADD friends:user1 "Alice" "Bob" "Charlie"

# أصدقاء المستخدم 2
SADD friends:user2 "Bob" "Charlie" "David"

# الأصدقاء المشتركون
SINTER friends:user1 friends:user2
▶ جرّب الكود

مثال:نظام اليانصيب

BASH
# إضافة مشاركين
SADD lottery "user1" "user2" "user3" "user4" "user5"

# سحب فائز واحد
SPOP lottery

# سحب 3 فائزين (بدون تكرار)
SPOP lottery 3
▶ جرّب الكود

عمليات المجموعات

SINTER: التقاطع

REDIS
SADD set1 "a" "b" "c"
SADD set2 "b" "c" "d"

SINTER set1 set2
1) "b"
2) "c"

SUNION: الاتحاد

REDIS
SUNION set1 set2
1) "a"
2) "b"
3) "c"
4) "d"

SDIFF: الفرق

REDIS
# العناصر في set1 وليست في set2
SDIFF set1 set2
1) "a"

# العناصر في set2 وليست في set1
SDIFF set2 set1
1) "d"

تخزين النتائج

REDIS
# تخزين التقاطع في مجموعة جديدة
SINTERSTORE result set1 set2
(integer) 2

# تخزين الاتحاد في مجموعة جديدة
SUNIONSTORE result set1 set2
(integer) 4

# تخزين الفرق في مجموعة جديدة
SDIFFSTORE result set1 set2
(integer) 1

❓ أسئلة شائعة

س ما الفرق بين SMEMBERS و SSCAN؟
ج SMEMBERS يُرجع جميع العناصر مرة واحدة وقد يحظر للمجموعات الكبيرة. SSCAN يُرجع على دفعات — مناسب لمجموعات البيانات الكبيرة。
س ما هو الحد الأقصى لعدد العناصر في المجموعة؟
ج نظريًا 2^32 - 1 عنصر (حوالي 4.2 مليار).
س ما الفرق بين المجموعة والقائمة؟
ج المجموعات غير مرتبة بعناصر فريدة؛ القوائم مرتبة وتسمح بالتكرار. اختر حسب احتياجاتك。

📖 ملخص

📝 تمارين

  1. تمرين العلامات: أنشئ نظام علامات للمقالات، أضف علامات مختلفة لـ 3 مقالات، ابحث عن المقالات ذات العلامات المشتركة
  2. تمرين الأصدقاء: محاكاة علاقات الأصدقاء لـ 3 مستخدمين، ابحث عن الأصدقاء المشتركين بين أي مستخدمين
  3. تمرين اليانصيب: أنشئ نظام يانصيب، أضف 10 مشاركين، اسحب 3 فائزين عشوائيًا

الدرس التالي

في الدرس التالي، سنتعلم مجموعات Redis (الجزء 2)، والتي تغطي عمليات المجموعات المتقدمة.

100%