Redis XTRIM

Redis Xtrim



تفاصيل منخفضة المستوى لتيارات Redis

تدفقات Redis عبارة عن بنية بيانات ملحقة فقط توفر مجموعة من عمليات القراءة والإدراج عالية الكفاءة مع آلية تخزين فعالة للذاكرة. داخليًا ، تستخدم تدفقات Redis بنية بيانات شجرة Radix وهي شجرة مُحسّنة للفضاء مع كفاءة ذاكرة عالية.

يقوم Redis بتدفق بيانات المخزن كقائمة من الإدخالات حيث يتكون كل إدخال من أزواج مفتاح - قيمة. عند مستوى منخفض ، يتم تجميع هذه الإدخالات في عقد ماكرو ، كما هو موضح في ما يلي.









في هذه المقالة ، نركز على إزالة إدخالات الدفق باستخدام أمر XTRIM ، ويؤثر المفهوم المذكور أعلاه عن كثب على كفاءة عملية الإزالة. عادةً ما تكون إزالة دخول Redis Stream فعالة للغاية إذا تم إجراؤها على مستوى العقدة الكبيرة ولكن ليس على مستوى الدخول. يتم تنفيذ هذه الآلية بأمر XTRIM الذي سنناقشه في القسم التالي.



أمر XTRIM

يتم استخدام الأمر XTRIM لقطع إدخالات الدفق بناءً على قيمة عتبة معينة. يمكن أن يكون الحد الأقصى لعدد الإدخالات لكل دفق أو معرف إدخال أقدم. يقبل الأمر XTRIM نوع العتبة كوسيطة أمر. بناء جملة الأمر XTRIM كما يلي.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] قيمة العتبة [ عدد محدود ]

Stream_key : مفتاح تيار Redis.

ماكسين : أقصى طول للتيار بعد اقتطاع المدخلات. ستتم إزالة جميع الإدخالات التي تتجاوز طول الدفق المحدد بواسطة قيمة الحد. هذه الحجة هي عدد صحيح موجب.

MINID : الحد الأدنى لمعرف الدفق الذي يجب أن يبقى بعد اقتطاع المدخلات. ستتم إزالة جميع الإدخالات التي تحتوي على معرفات أقل من الحد المحدد. عندما تحدد هذه المعلمة ، تصبح العتبة معرف دفق.

= عامل التشغيل : عند التحديد ، سيتم إجراء التشذيب الدقيق بناءً على القيمة الحدية.

~ المشغل : عند التحديد ، سيتم إجراء اقتطاع دقيق تقريبًا بناءً على قيمة العتبة وحجم عقدة الماكرو.

قيمة العتبة : قيمة العتبة بناءً على الوسيطة MAXLEN أو MINID.

عدد محدود : الحد الأقصى لعدد الإدخالات المطلوب إزالتها.

حالة الاستخدام 01 - إزالة إدخالات التدفق بناءً على الطول الأقصى

لنفترض أن شركة السياحة تحتفظ بمتجر Redis لتتبع المعلومات السياحية. تم استخدام بنية بيانات Redis للتدفقات لتخزين معلومات كل سائح كأزواج ذات قيمة رئيسية. مع مرور الوقت ، نما التدفق ، وهم يخططون للاحتفاظ بأحدث 1000 إدخال فقط. لذلك حددوا أن الحد الأقصى لطول التيار يجب أن يكون 1000 في أي وقت. تم استخدام الأمر XTRIM لتحقيق ذلك.

لأغراض العرض التوضيحي ، أولاً ، سننشئ دفقًا به 10 إدخالات على النحو التالي. تم استخدام الأمر XADD لإجراء الإدراج.

xadd Touristinfo * اسم جاك كونتري ايطاليا فاميليميمس 5
xadd Touristinfo * اسم هاري بلد الولايات المتحدة الأمريكية فاميليميمس اثنين
xadd Touristinfo * اسم بلد نيكوميتا اليابان فاميليماتس 3
xadd Touristinfo * اسم زكريا بلد الهند فاميليميمس اثنين
xadd Touristinfo * اسم ريدموند كونتري برازيل فاميليميمس 6
xadd Touristinfo * اسم العثور على بلد اليابان familymems 3
xadd Touristinfo * اسم maryjohn country usa familymems اثنين
xadd Touristinfo * اسم بلد ليزا ايطاليا فاميليميمس 5
xadd Touristinfo * اسم بلد nimshikaa اليابان familymems 3
xadd Touristinfo * اسم nisha country italy familymems 5

دعنا نستخدم الأمر XRANGE لفحص معلومات البث السياحي على النحو التالي.

xrange Touristinfo - +

انتاج:

كما هو متوقع ، تم عرض إدخالات التدفق العشر بواسطة هذا الأمر.

لأغراض التوضيح ، سنقوم بقص التيار حيث سيكون أقصى طول له 5.

xtrim Touristinfo maxlen 5

دعونا نفحص مداخل الدفق مرة أخرى باستخدام الأمر XRANGE.

كما هو متوقع ، تم إخلاء خمسة مداخل من الدفق ، وطولها 5.

حالة الاستخدام 02 - إزالة إدخالات التدفق بناءً على معرفات التدفق

لنأخذ مثالاً حيث تقوم شركة أرصاد جوية بتتبع معلومات الطقس لموقع معين باستخدام تدفقات Redis. الآن ، يريدون حذف الإدخالات القديمة التي لم تعد مطلوبة. يمكننا استخدام الأمر XTRIM باستخدام استراتيجية MINID ، كما هو موضح في ما يلي.

أولاً ، سننشئ تدفقًا يسمى weatherinfo ونضيف إليه 5 إدخالات على النحو التالي.

xadd الطقس * مؤقت 10 رطوبة خمسون
xadd الطقس * مؤقت عشرين رطوبة 70
xadd الطقس * مؤقت 12 رطوبة 65
xadd الطقس * مؤقت خمسة عشر رطوبة 88
xadd الطقس * مؤقت 18 رطوبة أربعة خمسة

انتاج:

لنستخدم الأمر XTRIM لإزالة الإدخالات التي تحتوي على معرفات أقل من قيمة العتبة المحددة.

xtrim weatherinfo MINID 1660485503248 - 0

الحد الأدنى للمعرف المحدد مرتبط بالإدخال الثالث. ومن ثم ، سيتم حذف الإدخالات بعد الإدخال الثالث التي تحتوي على معرفات أقل.

انتاج:

نظرًا لأننا لم نحدد الوسيطتين = أو ~ بشكل صريح ، فإن الأمر يستخدم العامل = افتراضيًا. ومن ثم ، فقد تم إجراء التشذيب الدقيق في كلتا حالتي الاستخدام. إذا حددت عامل التشغيل ~ بشكل صريح ، فسيتم إجراء تشذيب دقيق تقريبًا ، كما هو موضح في ما يلي.

كما هو موضح في الشكل أعلاه ، تم استخدام أمر XTRIM مع عامل التشغيل ~. نطلب من الأمر إزالة جميع الإدخالات التي تتجاوز طول 100. نظرًا لأننا لا نجبر أمر XTRIM على إجراء تشذيب دقيق ، فسوف يركز على كفاءة عملية التشذيب. لذلك ، لن يقوم بإزالة الإدخالات الفورية التي تنتمي إلى نفس عقدة الماكرو. سيحتفظ بالإدخالات الثلاثة التالية الموجودة في نفس عقدة الماكرو وسيزيل جميع عقد الماكرو بعد ذلك. إنه يعطي قدرًا كبيرًا من تحسين الأداء مقارنة بنهج التشذيب الدقيق ، مما يفرض على الأمر بذل جهد إضافي. يتم إجراء نفس الإجراء عندما تستند العتبة إلى معرفات الإدخال.

تحدد الوسيطة LIMIT عدد الإدخالات التي تم إخلاؤها من الدفق المحدد ، والتي يمكن استخدامها لتحسين الأداء قليلاً.

استنتاج

باختصار ، يتم استخدام الأمر XTRIM لإزالة إدخالات الدفق بناءً على قيمة العتبة. يمكن تغيير نوع قيمة العتبة مع السياق الذي يتم تحديده باستخدام وسيطات الأمر MAXLEN و MINID. كما تمت مناقشته ، يمكن إجراء التشذيب بطريقتين حيث ستعتبر عملية التشذيب العتبة حدًا دقيقًا أو تقريبيًا. بشكل افتراضي ، يستخدم الأمر عامل التشغيل = الذي يتم استخدامه للتشذيب الدقيق. باستخدام عامل التشغيل ~ ، يمكنك إجراء عملية تشذيب تقريبية كما هو مذكور في القسم أعلاه. بشكل عام ، يساعدك أسلوب القص التقريبي ووسيطة LIMIT على تحقيق مكاسب كبيرة في الأداء باستخدام أمر XTRIM.