English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Redis هي خدمة TCP تعتمد على نموذج العميل-المخدم وبروتوكول الطلب-الاستجابة. هذا يعني أن الطلب عادةً يتبع الخطوات التالية:
يرسل العميل طلبًا استعلاميًا إلى النodes ويستمع إلى إعادة التشغيل Socket، عادةً في نمط منعطفي، وينتظر استجابة النodes.
يعالج النodes الأوامر ويعيد النتائج إلى العميل.
يمكن للغة 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 مرات.