مجموعات Redis (الجزء 1)
المجموعة هي مجموعة غير مرتبة من السلاسل الفريدة. يغطي هذا الدرس عمليات المجموعات الأساسية.
ما هي المجموعة؟
المجموعة تشبه:
- set في Python
- Set في JavaScript
- HashSet في Java
ميزات المجموعة:
- غير مرتبة: العناصر ليس لها ترتيب محدد
- فريدة: إزالة التكرار تلقائيًا
- تدعم عمليات المجموعات: التقاطع، الاتحاد، الفرق
الأوامر الأساسية
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 مليار).
س ما الفرق بين المجموعة والقائمة؟
ج المجموعات غير مرتبة بعناصر فريدة؛ القوائم مرتبة وتسمح بالتكرار. اختر حسب احتياجاتك。
📖 ملخص
- المجموعات هي مجموعات غير مرتبة من السلاسل الفريدة
- SADD يضيف، SREM يزيل، SMEMBERS يحصل على جميع العناصر
- SISMEMBER يتحقق من الوجود، SCARD يحصل على الحجم
- تدعم التقاطع (SINTER)، الاتحاد (SUNION)، الفرق (SDIFF)
- مناسبة للعلامات، العلاقات الاجتماعية، إزالة التكرار، اليانصيب
📝 تمارين
- تمرين العلامات: أنشئ نظام علامات للمقالات، أضف علامات مختلفة لـ 3 مقالات، ابحث عن المقالات ذات العلامات المشتركة
- تمرين الأصدقاء: محاكاة علاقات الأصدقاء لـ 3 مستخدمين، ابحث عن الأصدقاء المشتركين بين أي مستخدمين
- تمرين اليانصيب: أنشئ نظام يانصيب، أضف 10 مشاركين، اسحب 3 فائزين عشوائيًا
الدرس التالي
في الدرس التالي، سنتعلم مجموعات Redis (الجزء 2)، والتي تغطي عمليات المجموعات المتقدمة.



