English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تقنية القنوات (Pipeline) في Redis

Redis هي خدمة TCP تعتمد على نموذج العميل-المخدم وبروتوكول الطلب-الاستجابة. هذا يعني أن الطلب عادةً يتبع الخطوات التالية:

  • يرسل العميل طلبًا استعلاميًا إلى النodes ويستمع إلى إعادة التشغيل Socket، عادةً في نمط منعطفي، وينتظر استجابة النodes.

  • يعالج النodes الأوامر ويعيد النتائج إلى العميل.

تقنية القنوات (Pipeline) في Redis

يمكن للغة Redis للقناة أن تسمح للعميل بالاستمرار في إرسال طلبات إلى النodes حتى في حالة عدم استجابة النodes، ثم قراءة جميع استجابات النodes بشكل واحد.

مثال على الإنترنت

للنظر في قناة Redis، يكفي تشغيل مثال Redis ووضع الأوامر التالية:

$(echo -en "PING\r\nSET w3codeboxkey redis\r\nGET w3codeboxkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3

في الأمثلة السابقة قمنا باستخدام PING تحقق من أن خدمة Redis متاحة، بعد ذلك قمنا بتعيين قيمة w3codeboxkey إلى redis، ثم نحن نحصل على قيمة w3codeboxkey ونزيد visitor بناءً على ذلك 3 مرات.

في النتائج التي نحصل عليها يمكننا رؤية أن هذه الأوامر يتم تقديمها إلى خدمة Redis بشكل واحد، ثم قراءة جميع استجابات النodes بشكل واحد

مزايا تقنية القناة

من بين مزايا تقنية القناة الأكثر وضوحًا هو تحسين أداء خدمة Redis.

بعض بيانات الاختبار

في الاختبارات التالية، سنستخدم عميل Ruby لـ Redis لدعم خاصية تقنية القناة، لاختبار تأثير تقنية القناة على السرعة.

تطلب 'rubygems' 
تطلب 'redis'
تعريف bench(descr) 
start = Time.now 
تسليم 
puts "#{descr} #{Time.now-start} ثانية" 
انتهاء
تعريف without_pipelining 
r = Redis.new 
10000.times { 
    r.ping 
} 
انتهاء
تعريف with_pipelining 
r = Redis.new 
r.pipelined { 
    10000.times { 
        r.ping 
    } 
} 
انتهاء
bench("بدون القناة") { 
    بدون_القناة 
} 
bench("مع القناة") { 
    مع_القناة 
}

من خلال إجراء هذا السكريبت البسيط على نظام Mac OS X الموجود في الشبكة المحلية، يمكن ملاحظة أن تأخير العودة قد تحسن بشكل كبير بعد تشغيل عمليات القناة.

بدون القناة 1.185238 ثانية 
مع القناة 0.250783 ثانية

كما ترون، بعد تشغيل القناة، سرعتنا زادت بنسبة 5 مرات.