ரெடிஸ் ஸ்ட்ரீம் - உங்கள் செய்தியிடல் அமைப்புகளின் நம்பகத்தன்மை மற்றும் அளவிடுதல்

ரெடிஸ் ஸ்ட்ரீம் - உங்கள் செய்தியிடல் அமைப்புகளின் நம்பகத்தன்மை மற்றும் அளவிடுதல்

ரெடிஸ் ஸ்ட்ரீம் என்பது ரெடிஸில் பதிப்பு 5.0 உடன் அறிமுகப்படுத்தப்பட்ட ஒரு புதிய சுருக்க தரவு வகையாகும்
கருத்துப்படி, ரெடிஸ் ஸ்ட்ரீம் என்பது நீங்கள் உள்ளீடுகளைச் சேர்க்கக்கூடிய ஒரு பட்டியல். ஒவ்வொரு பதிவிற்கும் ஒரு தனிப்பட்ட அடையாளங்காட்டி உள்ளது. இயல்பாக, ஐடி தானாகவே உருவாக்கப்படும் மற்றும் நேர முத்திரையை உள்ளடக்கியது. எனவே, நீங்கள் காலப்போக்கில் பதிவுகளின் வரம்புகளை வினவலாம் அல்லது புதிய தரவை ஸ்ட்ரீமில் வரும்போது பெறலாம், யூனிக்ஸ் "டெயில் -எஃப்" கட்டளை ஒரு பதிவுக் கோப்பைப் படித்து புதிய தரவுக்காகக் காத்திருக்கும் போது உறைகிறது. பல கிளையன்ட்கள் ஒரே நேரத்தில் ஒரு நூலைக் கேட்க முடியும் என்பதை நினைவில் கொள்ளவும், பல "tail -f" செயல்முறைகள் ஒரு கோப்பை ஒரே நேரத்தில் ஒன்றுடன் ஒன்று முரண்படாமல் படிக்க முடியும்.

புதிய தரவு வகையின் அனைத்து நன்மைகளையும் புரிந்து கொள்ள, ரெடிஸ் ஸ்ட்ரீமின் செயல்பாட்டை ஓரளவு பிரதிபலிக்கும் நீண்ட காலமாக இருக்கும் ரெடிஸ் கட்டமைப்புகளை விரைவாகப் பார்ப்போம்.

ரெடிஸ் PUB/SUB

Redis Pub/Sub என்பது உங்கள் முக்கிய மதிப்பு ஸ்டோரில் ஏற்கனவே கட்டமைக்கப்பட்ட ஒரு எளிய செய்தியிடல் அமைப்பாகும். இருப்பினும், எளிமை ஒரு விலையில் வருகிறது:

  • சில காரணங்களால் வெளியீட்டாளர் தோல்வியுற்றால், அவர் தனது அனைத்து சந்தாதாரர்களையும் இழக்கிறார்
  • வெளியீட்டாளர் அதன் அனைத்து சந்தாதாரர்களின் சரியான முகவரியைத் தெரிந்து கொள்ள வேண்டும்
  • தரவு செயலாக்கப்பட்டதை விட வேகமாக வெளியிடப்பட்டால், ஒரு வெளியீட்டாளர் தனது சந்தாதாரர்களுக்கு பணியை ஓவர்லோட் செய்யலாம்
  • எத்தனை சந்தாதாரர்களுக்கு டெலிவரி செய்யப்பட்டது மற்றும் எவ்வளவு விரைவாக இந்தச் செய்தியைச் செயல்படுத்த முடிந்தது என்பதைப் பொருட்படுத்தாமல், வெளியிடப்பட்ட உடனேயே வெளியீட்டாளரின் இடையகத்திலிருந்து செய்தி நீக்கப்படும்.
  • அனைத்து சந்தாதாரர்களும் ஒரே நேரத்தில் செய்தியைப் பெறுவார்கள். அதே செய்தியை செயலாக்கும் வரிசையை சந்தாதாரர்கள் எப்படியாவது தங்களுக்குள் ஒப்புக் கொள்ள வேண்டும்.
  • ஒரு சந்தாதாரர் ஒரு செய்தியை வெற்றிகரமாகச் செயலாக்கினார் என்பதை உறுதிப்படுத்த உள்ளமைக்கப்பட்ட வழிமுறை எதுவும் இல்லை. ஒரு சந்தாதாரர் ஒரு செய்தியைப் பெற்று, செயலாக்கத்தின் போது செயலிழந்தால், வெளியீட்டாளருக்கு அதைப் பற்றி தெரியாது.

ரெடிஸ் பட்டியல்

ரெடிஸ் பட்டியல் என்பது படிக்கும் கட்டளைகளைத் தடுப்பதை ஆதரிக்கும் தரவுக் கட்டமைப்பாகும். பட்டியலின் ஆரம்பம் அல்லது முடிவில் இருந்து நீங்கள் செய்திகளைச் சேர்க்கலாம் மற்றும் படிக்கலாம். இந்த கட்டமைப்பின் அடிப்படையில், உங்கள் விநியோகிக்கப்பட்ட கணினிக்கு நீங்கள் ஒரு நல்ல அடுக்கு அல்லது வரிசையை உருவாக்கலாம், பெரும்பாலான சந்தர்ப்பங்களில் இது போதுமானதாக இருக்கும். Redis Pub/Sub இலிருந்து முக்கிய வேறுபாடுகள்:

  • செய்தி ஒரு வாடிக்கையாளருக்கு வழங்கப்படுகிறது. முதலில் படிக்க-தடுக்கப்பட்ட கிளையன்ட் முதலில் தரவைப் பெறுவார்.
  • ஒவ்வொரு செய்தியையும் படிக்கும் செயல்பாட்டை கிளின்ட் தானே தொடங்க வேண்டும். வாடிக்கையாளர்களைப் பற்றி பட்டியல் எதுவும் தெரியாது.
  • செய்திகளை யாராவது படிக்கும் வரை அல்லது வெளிப்படையாக நீக்கும் வரை சேமிக்கப்படும். நீங்கள் Redis சேவையகத்தை வட்டில் தரவு பறிக்க கட்டமைத்தால், கணினியின் நம்பகத்தன்மை வியத்தகு அளவில் அதிகரிக்கிறது.

ஸ்ட்ரீம் அறிமுகம்

ஸ்ட்ரீமில் உள்ளீட்டைச் சேர்த்தல்

அணி XADD ஸ்ட்ரீமில் புதிய நுழைவைச் சேர்க்கிறது. பதிவு என்பது ஒரு சரம் மட்டுமல்ல, அது ஒன்று அல்லது அதற்கு மேற்பட்ட முக்கிய மதிப்பு ஜோடிகளைக் கொண்டுள்ளது. எனவே, ஒவ்வொரு உள்ளீடும் ஏற்கனவே கட்டமைக்கப்பட்டுள்ளது மற்றும் ஒரு CSV கோப்பின் கட்டமைப்பை ஒத்திருக்கிறது.

> XADD mystream * sensor-id 1234 temperature 19.8
1518951480106-0

மேலே உள்ள எடுத்துக்காட்டில், ஸ்ட்ரீமில் "மைஸ்ட்ரீம்" என்ற பெயருடன் இரண்டு புலங்களைச் சேர்க்கிறோம்: "சென்சார்-ஐடி" மற்றும் "வெப்பநிலை" முறையே "1234" மற்றும் "19.8" மதிப்புகளுடன். இரண்டாவது வாதமாக, கட்டளை ஒரு அடையாளங்காட்டியை எடுத்துக்கொள்கிறது, அது நுழைவுக்கு ஒதுக்கப்படும் - இந்த அடையாளங்காட்டி ஸ்ட்ரீமில் உள்ள ஒவ்வொரு உள்ளீட்டையும் தனித்துவமாக அடையாளம் காட்டுகிறது. எவ்வாறாயினும், இந்த விஷயத்தில் நாங்கள் தேர்ச்சி பெற்றோம் * ஏனெனில் ரெடிஸ் எங்களுக்காக ஒரு புதிய ஐடியை உருவாக்க வேண்டும். ஒவ்வொரு புதிய ஐடியும் அதிகரிக்கும். எனவே, ஒவ்வொரு புதிய உள்ளீடும் முந்தைய உள்ளீடுகளுடன் தொடர்புடைய அதிக அடையாளங்காட்டியைக் கொண்டிருக்கும்.

அடையாளங்காட்டி வடிவம்

நுழைவு ஐடி கட்டளை மூலம் திரும்பியது XADD, இரண்டு பகுதிகளைக் கொண்டுள்ளது:

{millisecondsTime}-{sequenceNumber}

மில்லி விநாடிகள் நேரம் — யூனிக்ஸ் நேரம் மில்லி விநாடிகளில் (ரெடிஸ் சர்வர் நேரம்). இருப்பினும், தற்போதைய நேரம் முந்தைய பதிவின் நேரத்தைக் காட்டிலும் குறைவாகவோ அல்லது குறைவாகவோ இருந்தால், முந்தைய பதிவின் நேர முத்திரை பயன்படுத்தப்படும். எனவே, சேவையக நேரம் முந்தைய காலத்திற்குச் சென்றால், புதிய அடையாளங்காட்டியானது இன்க்ரிமென்ட் சொத்தை இன்னும் தக்க வைத்துக் கொள்ளும்.

தொடரிலக்கம் ஒரே மில்லி வினாடியில் உருவாக்கப்பட்ட பதிவுகளுக்குப் பயன்படுத்தப்படுகிறது. தொடரிலக்கம் முந்தைய நுழைவுடன் ஒப்பிடும்போது 1 ஆல் அதிகரிக்கப்படும். ஏனெனில் தொடரிலக்கம் 64 பிட்கள் அளவு உள்ளது, பின்னர் நடைமுறையில் ஒரு மில்லி விநாடிக்குள் உருவாக்கக்கூடிய பதிவுகளின் எண்ணிக்கையில் வரம்பிற்குள் செல்லக்கூடாது.

இத்தகைய அடையாளங்காட்டிகளின் வடிவம் முதல் பார்வையில் விசித்திரமாகத் தோன்றலாம். ஒரு அவநம்பிக்கையான வாசகர் நேரம் ஏன் அடையாளங்காட்டியின் ஒரு பகுதியாகும் என்று ஆச்சரியப்படலாம். காரணம் ரெடிஸ் ஸ்ட்ரீம்கள் ஐடி மூலம் வரம்பு வினவல்களை ஆதரிக்கின்றன. பதிவு உருவாக்கப்பட்ட நேரத்துடன் அடையாளங்காட்டி தொடர்புடையதாக இருப்பதால், இது நேர வரம்புகளை வினவுவதை சாத்தியமாக்குகிறது. கட்டளையைப் பார்க்கும்போது ஒரு குறிப்பிட்ட உதாரணத்தைப் பார்ப்போம் XRANGE.

சில காரணங்களால் பயனர் தனது சொந்த அடையாளங்காட்டியைக் குறிப்பிட வேண்டும் என்றால், எடுத்துக்காட்டாக, சில வெளிப்புற அமைப்புகளுடன் தொடர்புடையதாக இருந்தால், அதை நாம் கட்டளைக்கு அனுப்பலாம். XADD கீழே காட்டப்பட்டுள்ளபடி * என்பதற்கு பதிலாக:

> XADD somestream 0-1 field value
0-1
> XADD somestream 0-2 foo bar
0-2

இந்த வழக்கில் ஐடி அதிகரிப்பை நீங்களே கண்காணிக்க வேண்டும் என்பதை நினைவில் கொள்ளவும். எங்கள் எடுத்துக்காட்டில், குறைந்தபட்ச அடையாளங்காட்டி "0-1" ஆகும், எனவே கட்டளை "0-1" க்கு சமமான அல்லது குறைவாக இருக்கும் மற்றொரு அடையாளங்காட்டியை ஏற்காது.

> XADD somestream 0-1 foo bar
(error) ERR The ID specified in XADD is equal or smaller than the target stream top item

ஒரு ஸ்ட்ரீமில் உள்ள பதிவுகளின் எண்ணிக்கை

கட்டளையைப் பயன்படுத்தி ஸ்ட்ரீமில் உள்ள பதிவுகளின் எண்ணிக்கையைப் பெறுவது சாத்தியமாகும் XLEN. எங்கள் உதாரணத்திற்கு, இந்த கட்டளை பின்வரும் மதிப்பை வழங்கும்:

> XLEN somestream
(integer) 2

வரம்பு வினவல்கள் - XRANGE மற்றும் XREVRANGE

வரம்பின்படி தரவைக் கோர, இரண்டு அடையாளங்காட்டிகளைக் குறிப்பிட வேண்டும் - வரம்பின் ஆரம்பம் மற்றும் முடிவு. திரும்பிய வரம்பில் எல்லைகள் உட்பட அனைத்து கூறுகளும் அடங்கும். இரண்டு சிறப்பு அடையாளங்காட்டிகளும் உள்ளன “-” மற்றும் “+”, முறையே ஸ்ட்ரீமில் சிறிய (முதல் பதிவு) மற்றும் பெரிய (கடைசி பதிவு) அடையாளங்காட்டி என்று பொருள். கீழே உள்ள எடுத்துக்காட்டு அனைத்து ஸ்ட்ரீம் உள்ளீடுகளையும் பட்டியலிடும்.

> XRANGE mystream - +
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"
2) 1) 1518951482479-0
   2) 1) "sensor-id"
      2) "9999"
      3) "temperature"
      4) "18.2"

திரும்பிய ஒவ்வொரு பதிவும் இரண்டு கூறுகளின் வரிசையாகும்: ஒரு அடையாளங்காட்டி மற்றும் முக்கிய மதிப்பு ஜோடிகளின் பட்டியல். பதிவு அடையாளங்காட்டிகள் நேரத்துடன் தொடர்புடையவை என்று நாங்கள் ஏற்கனவே கூறியுள்ளோம். எனவே, ஒரு குறிப்பிட்ட கால வரம்பைக் கோரலாம். எவ்வாறாயினும், கோரிக்கையில் முழு அடையாளங்காட்டியைக் குறிப்பிடாமல், Unix நேரத்தை மட்டுமே குறிப்பிட முடியும், இது தொடர்பான பகுதியைத் தவிர்த்து தொடரிலக்கம். அடையாளங்காட்டியின் தவிர்க்கப்பட்ட பகுதி தானாகவே வரம்பின் தொடக்கத்தில் பூஜ்ஜியமாகவும் வரம்பின் முடிவில் அதிகபட்ச சாத்தியமான மதிப்பாகவும் அமைக்கப்படும். இரண்டு மில்லி விநாடிகள் வரம்பை நீங்கள் எவ்வாறு கோரலாம் என்பதற்கான எடுத்துக்காட்டு கீழே உள்ளது.

> XRANGE mystream 1518951480106 1518951480107
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"

இந்த வரம்பில் எங்களிடம் ஒரே ஒரு உள்ளீடு மட்டுமே உள்ளது, இருப்பினும் உண்மையான தரவுத் தொகுப்புகளில் ரிசல்ட் மிகப்பெரியதாக இருக்கும். இந்த காரணத்திற்காக XRANGE COUNT விருப்பத்தை ஆதரிக்கிறது. அளவைக் குறிப்பிடுவதன் மூலம், முதல் N பதிவுகளைப் பெறலாம். அடுத்த N பதிவுகளை (பேஜினேஷன்) பெற வேண்டுமானால், கடைசியாகப் பெற்ற ஐடியைப் பயன்படுத்தலாம், அதை அதிகரிக்கலாம் தொடரிலக்கம் ஒருவரால் மீண்டும் கேளுங்கள். இதைப் பின்வரும் எடுத்துக்காட்டில் பார்ப்போம். நாங்கள் 10 கூறுகளைச் சேர்க்கத் தொடங்குகிறோம் XADD (மைஸ்ட்ரீம் ஏற்கனவே 10 கூறுகளால் நிரப்பப்பட்டதாகக் கருதினால்). ஒரு கட்டளைக்கு 2 கூறுகளைப் பெறும் மறு செய்கையைத் தொடங்க, நாம் முழு வரம்பில் தொடங்குகிறோம், ஆனால் 2 க்கு சமமான COUNT உடன் தொடங்குகிறோம்.

> XRANGE mystream - + COUNT 2
1) 1) 1519073278252-0
   2) 1) "foo"
      2) "value_1"
2) 1) 1519073279157-0
   2) 1) "foo"
      2) "value_2"

அடுத்த இரண்டு உறுப்புகளுடன் மீண்டும் மீண்டும் செய்ய, கடைசியாகப் பெற்ற ஐடியை, அதாவது 1519073279157-0ஐத் தேர்ந்தெடுத்து, 1 ஐச் சேர்க்க வேண்டும். தொடரிலக்கம்.
இதன் விளைவாக வரும் ஐடி, இந்த வழக்கில் 1519073279157-1, இப்போது அடுத்த அழைப்புக்கான வரம்பு வாதத்தின் புதிய தொடக்கமாகப் பயன்படுத்தப்படலாம் XRANGE:

> XRANGE mystream 1519073279157-1 + COUNT 2
1) 1) 1519073280281-0
   2) 1) "foo"
      2) "value_3"
2) 1) 1519073281432-0
   2) 1) "foo"
      2) "value_4"

மற்றும் பல. ஏனெனில் சிக்கலானது XRANGE தேடுவதற்கு O(log(N)) ஆகவும், பின்னர் M உறுப்புகளை வழங்க O(M) ஆகவும் இருக்கும், பிறகு ஒவ்வொரு மறு செய்கை படியும் வேகமாக இருக்கும். இவ்வாறு, பயன்படுத்தி XRANGE ஸ்ட்ரீம்களை திறமையாக மீண்டும் இயக்க முடியும்.

அணி XREVRANGE சமமானதாகும் XRANGE, ஆனால் உறுப்புகளை தலைகீழ் வரிசையில் வழங்குகிறது:

> XREVRANGE mystream + - COUNT 1
1) 1) 1519073287312-0
   2) 1) "foo"
      2) "value_10"

கட்டளை என்பதை கவனத்தில் கொள்ளவும் XREVRANGE வரம்பு வாதங்களை தலைகீழ் வரிசையில் தொடங்கவும் நிறுத்தவும் எடுக்கும்.

XREAD ஐப் பயன்படுத்தி புதிய உள்ளீடுகளைப் படித்தல்

ஸ்ட்ரீமில் குழுசேர்வது மற்றும் புதிய செய்திகளை மட்டுமே பெறுவது பெரும்பாலும் பணி எழுகிறது. இந்தக் கருத்து ரெடிஸ் பப்/சப் அல்லது ரெடிஸ் லிஸ்ட்டைத் தடுப்பது போன்றே தோன்றலாம், ஆனால் ரெடிஸ் ஸ்ட்ரீமை எப்படிப் பயன்படுத்துவது என்பதில் அடிப்படை வேறுபாடுகள் உள்ளன:

  1. ஒவ்வொரு புதிய செய்தியும் ஒவ்வொரு சந்தாதாரருக்கும் இயல்பாகவே வழங்கப்படும். இந்த நடத்தை தடுக்கும் Redis பட்டியலில் இருந்து வேறுபட்டது, ஒரு புதிய செய்தியை ஒரு சந்தாதாரர் மட்டுமே படிக்க முடியும்.
  2. Redis Pub/Sub இல் அனைத்து செய்திகளும் மறக்கப்பட்டு, எப்போதும் நிலைத்திருக்காது, ஸ்ட்ரீமில் அனைத்து செய்திகளும் காலவரையின்றி தக்கவைக்கப்படும் (கிளையன்ட் வெளிப்படையாக நீக்கினால் தவிர).
  3. ஒரு ஸ்ட்ரீமில் உள்ள செய்திகளுக்கான அணுகலை வேறுபடுத்தி அறிய ரெடிஸ் ஸ்ட்ரீம் உங்களை அனுமதிக்கிறது. ஒரு குறிப்பிட்ட சந்தாதாரர் அவர்களின் தனிப்பட்ட செய்தி வரலாற்றை மட்டுமே பார்க்க முடியும்.

நீங்கள் ஒரு நூலுக்கு குழுசேரலாம் மற்றும் கட்டளையைப் பயன்படுத்தி புதிய செய்திகளைப் பெறலாம் XREAD. அதை விட சற்று சிக்கலானது XRANGE, எனவே முதலில் எளிமையான உதாரணங்களுடன் தொடங்குவோம்.

> XREAD COUNT 2 STREAMS mystream 0
1) 1) "mystream"
   2) 1) 1) 1519073278252-0
         2) 1) "foo"
            2) "value_1"
      2) 1) 1519073279157-0
         2) 1) "foo"
            2) "value_2"

மேலே உள்ள உதாரணம் தடுக்காத படிவத்தைக் காட்டுகிறது XREAD. COUNT விருப்பம் விருப்பமானது என்பதை நினைவில் கொள்ளவும். உண்மையில், STREAMS விருப்பத்தேர்வு மட்டுமே தேவையான கட்டளை விருப்பமாகும், இது தொடர்புடைய அதிகபட்ச அடையாளங்காட்டியுடன் ஸ்ட்ரீம்களின் பட்டியலைக் குறிப்பிடுகிறது. "ஸ்ட்ரீம்ஸ் மைஸ்ட்ரீம் 0" என்று எழுதினோம் - மைஸ்ட்ரீம் ஸ்ட்ரீமின் அனைத்து பதிவுகளையும் "0-0" ஐ விட அதிகமான அடையாளங்காட்டியுடன் பெற விரும்புகிறோம். எடுத்துக்காட்டில் இருந்து நீங்கள் பார்க்க முடியும் என, கட்டளை நூலின் பெயரை வழங்குகிறது, ஏனெனில் நாம் ஒரே நேரத்தில் பல நூல்களுக்கு குழுசேர முடியும். உதாரணமாக, "ஸ்ட்ரீம்ஸ் மைஸ்ட்ரீம் மற்றஸ்ட்ரீம் 0 0" என்று எழுதலாம். STREAMS விருப்பத்திற்குப் பிறகு நாம் முதலில் தேவையான அனைத்து ஸ்ட்ரீம்களின் பெயர்களையும் பின்னர் அடையாளங்காட்டிகளின் பட்டியலையும் வழங்க வேண்டும் என்பதை நினைவில் கொள்ளவும்.

இந்த எளிய வடிவத்தில் கட்டளை ஒப்பிடும்போது சிறப்பு எதையும் செய்யாது XRANGE. இருப்பினும், சுவாரஸ்யமான விஷயம் என்னவென்றால், நாம் எளிதாக திருப்ப முடியும் XREAD தடுக்கும் கட்டளைக்கு, BLOCK வாதத்தைக் குறிப்பிடுகிறது:

> XREAD BLOCK 0 STREAMS mystream $

மேலே உள்ள எடுத்துக்காட்டில், ஒரு புதிய BLOCK விருப்பம் 0 மில்லி விநாடிகளின் காலக்கெடுவுடன் குறிப்பிடப்பட்டுள்ளது (இது காலவரையின்றி காத்திருக்கிறது). மேலும், ஸ்ட்ரீம் mystreamக்கான வழக்கமான அடையாளங்காட்டியைக் கடப்பதற்குப் பதிலாக, ஒரு சிறப்பு அடையாளங்காட்டி $ அனுப்பப்பட்டது. இந்த சிறப்பு அடையாளங்காட்டி என்பது அதைக் குறிக்கிறது XREAD mystream இல் உள்ள அதிகபட்ச அடையாளங்காட்டியை அடையாளங்காட்டியாகப் பயன்படுத்த வேண்டும். எனவே நாம் கேட்கத் தொடங்கிய தருணத்திலிருந்து மட்டுமே புதிய செய்திகளைப் பெறுவோம். சில வழிகளில் இது Unix "tail -f" கட்டளையைப் போன்றது.

BLOCK விருப்பத்தைப் பயன்படுத்தும் போது நாம் சிறப்பு அடையாளங்காட்டி $ ஐப் பயன்படுத்த வேண்டிய அவசியமில்லை என்பதை நினைவில் கொள்ளவும். ஸ்ட்ரீமில் இருக்கும் எந்த அடையாளங்காட்டியையும் நாம் பயன்படுத்தலாம். குழு எங்கள் கோரிக்கையைத் தடுக்காமல் உடனடியாகச் சேவை செய்ய முடிந்தால், அது அதைச் செய்யும், இல்லையெனில் அது தடுக்கும்.

தடுப்பது XREAD ஒரே நேரத்தில் பல நூல்களைக் கேட்க முடியும், அவற்றின் பெயர்களைக் குறிப்பிட வேண்டும். இந்த வழக்கில், கட்டளையானது தரவைப் பெற்ற முதல் ஸ்ட்ரீமின் பதிவை வழங்கும். கொடுக்கப்பட்ட ஸ்ட்ரீமில் தடுக்கப்பட்ட முதல் சந்தாதாரர் முதலில் தரவைப் பெறுவார்.

நுகர்வோர் குழுக்கள்

சில பணிகளில், ஒரு தொடரிழையில் உள்ள செய்திகளுக்கான சந்தாதாரர் அணுகலைக் கட்டுப்படுத்த விரும்புகிறோம். இது பயனுள்ளதாக இருக்கும் ஒரு உதாரணம், ஒரு த்ரெட்டில் இருந்து வெவ்வேறு செய்திகளைப் பெறும், இது செய்தி செயலாக்கத்தை அளவிட அனுமதிக்கிறது.

எங்களிடம் மூன்று சந்தாதாரர்கள் C1, C2, C3 மற்றும் 1, 2, 3, 4, 5, 6, 7 ஆகிய செய்திகளைக் கொண்ட ஒரு நூல் இருப்பதாகக் கற்பனை செய்தால், கீழே உள்ள வரைபடத்தில் உள்ளதைப் போல செய்திகள் வழங்கப்படும்:

1 -> C1
2 -> C2
3 -> C3
4 -> C1
5 -> C2
6 -> C3
7 -> C1

இந்த விளைவை அடைய, ரெடிஸ் ஸ்ட்ரீம் நுகர்வோர் குழு என்ற கருத்தைப் பயன்படுத்துகிறது. இந்த கருத்து ஒரு போலி-சந்தாதாரரைப் போன்றது, இது ஸ்ட்ரீமில் இருந்து தரவைப் பெறுகிறது, ஆனால் உண்மையில் ஒரு குழுவில் உள்ள பல சந்தாதாரர்களால் வழங்கப்படுகிறது, இது சில உத்தரவாதங்களை வழங்குகிறது:

  1. ஒவ்வொரு செய்தியும் குழுவில் உள்ள வெவ்வேறு சந்தாதாரருக்கு வழங்கப்படும்.
  2. ஒரு குழுவிற்குள், சந்தாதாரர்கள் அவர்களின் பெயரால் அடையாளம் காணப்படுகிறார்கள், இது ஒரு கேஸ்-சென்சிட்டிவ் சரம். ஒரு சந்தாதாரர் தற்காலிகமாக குழுவிலிருந்து வெளியேறினால், அவர் தனது சொந்த பெயரைப் பயன்படுத்தி மீண்டும் குழுவில் சேர்க்கப்படலாம்.
  3. ஒவ்வொரு நுகர்வோர் குழுவும் "முதல் படிக்காத செய்தி" கருத்தைப் பின்பற்றுகிறது. ஒரு சந்தாதாரர் புதிய செய்திகளைக் கோரும்போது, ​​குழுவில் உள்ள எந்தவொரு சந்தாதாரருக்கும் இதுவரை வழங்கப்படாத செய்திகளை மட்டுமே அது பெற முடியும்.
  4. சந்தாதாரரால் செய்தி வெற்றிகரமாக செயலாக்கப்பட்டது என்பதை வெளிப்படையாக உறுதிப்படுத்த ஒரு கட்டளை உள்ளது. இந்த கட்டளை அழைக்கப்படும் வரை, கோரப்பட்ட செய்தி "நிலுவையிலுள்ள" நிலையில் இருக்கும்.
  5. நுகர்வோர் குழுவிற்குள், ஒவ்வொரு சந்தாதாரரும் தனக்கு வழங்கப்பட்ட செய்திகளின் வரலாற்றைக் கோரலாம், ஆனால் இன்னும் செயலாக்கப்படவில்லை ("நிலுவையில் உள்ள" நிலையில்)

ஒரு வகையில், குழுவின் நிலையை பின்வருமாறு வெளிப்படுத்தலாம்:

+----------------------------------------+
| consumer_group_name: mygroup          
| consumer_group_stream: somekey        
| last_delivered_id: 1292309234234-92    
|                                                           
| consumers:                                          
|    "consumer-1" with pending messages  
|       1292309234234-4                          
|       1292309234232-8                          
|    "consumer-42" with pending messages 
|       ... (and so forth)                             
+----------------------------------------+

இப்போது நுகர்வோர் குழுவிற்கான முக்கிய கட்டளைகளுடன் பழகுவதற்கான நேரம் இது, அதாவது:

  • XGROUP குழுக்களை உருவாக்க, அழிக்க மற்றும் நிர்வகிக்க பயன்படுகிறது
  • XREADGROUP குழு மூலம் ஸ்ட்ரீம் வாசிக்கப் பயன்படுகிறது
  • XACK - இந்த கட்டளை சந்தாதாரர் செய்தியை வெற்றிகரமாக செயலாக்கியதாகக் குறிக்க அனுமதிக்கிறது

நுகர்வோர் குழு உருவாக்கம்

mystream ஏற்கனவே உள்ளது என்று வைத்துக் கொள்வோம். பின்னர் குழு உருவாக்கும் கட்டளை இப்படி இருக்கும்:

> XGROUP CREATE mystream mygroup $
OK

ஒரு குழுவை உருவாக்கும் போது, ​​நாம் ஒரு அடையாளங்காட்டியை அனுப்ப வேண்டும், அதில் இருந்து குழு செய்திகளைப் பெறும். நாம் அனைத்து புதிய செய்திகளையும் பெற விரும்பினால், சிறப்பு அடையாளங்காட்டி $ஐப் பயன்படுத்தலாம் (மேலே உள்ள எங்கள் எடுத்துக்காட்டில் உள்ளது போல). சிறப்பு அடையாளங்காட்டிக்கு பதிலாக 0 ஐக் குறிப்பிட்டால், நூலில் உள்ள அனைத்து செய்திகளும் குழுவிற்குக் கிடைக்கும்.

இப்போது குழு உருவாக்கப்பட்டுவிட்டதால், கட்டளையைப் பயன்படுத்தி உடனடியாக செய்திகளைப் படிக்க ஆரம்பிக்கலாம் XREADGROUP. இந்த கட்டளை மிகவும் ஒத்திருக்கிறது XREAD மற்றும் விருப்பமான BLOCK விருப்பத்தை ஆதரிக்கிறது. இருப்பினும், தேவைப்படும் GROUP விருப்பம் உள்ளது, அது எப்போதும் இரண்டு வாதங்களுடன் குறிப்பிடப்பட வேண்டும்: குழுவின் பெயர் மற்றும் சந்தாதாரர் பெயர். COUNT விருப்பமும் ஆதரிக்கப்படுகிறது.

நூலைப் படிக்கும் முன், சில செய்திகளை அங்கே வைப்போம்:

> XADD mystream * message apple
1526569495631-0
> XADD mystream * message orange
1526569498055-0
> XADD mystream * message strawberry
1526569506935-0
> XADD mystream * message apricot
1526569535168-0
> XADD mystream * message banana
1526569544280-0

இப்போது இந்த ஸ்ட்ரீமை குழுவில் படிக்க முயற்சிப்போம்:

> XREADGROUP GROUP mygroup Alice COUNT 1 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) 1526569495631-0
         2) 1) "message"
            2) "apple"

மேலே உள்ள கட்டளை பின்வருமாறு சொல்லில் வாசிக்கிறது:

"மைக்ரூப்பின் உறுப்பினரான நான், சந்தாதாரர் ஆலிஸ், இதுவரை யாருக்கும் வழங்கப்படாத எனது ஸ்ட்ரீமில் இருந்து ஒரு செய்தியைப் படிக்க விரும்புகிறேன்."

ஒவ்வொரு முறையும் ஒரு சந்தாதாரர் ஒரு குழுவில் ஒரு செயல்பாட்டைச் செய்யும்போது, ​​அது குழுவிற்குள் தன்னைத் தனித்துவமாக அடையாளப்படுத்திக் கொண்டு, அதன் பெயரை வழங்க வேண்டும். மேலே உள்ள கட்டளையில் இன்னும் ஒரு மிக முக்கியமான விவரம் உள்ளது - சிறப்பு அடையாளங்காட்டி ">". இந்த சிறப்பு அடையாளங்காட்டி செய்திகளை வடிகட்டுகிறது, இதுவரை வழங்கப்படாதவற்றை மட்டும் விட்டுவிடுகிறது.

மேலும், சிறப்பு சந்தர்ப்பங்களில், 0 அல்லது வேறு ஏதேனும் செல்லுபடியாகும் அடையாளங்காட்டி போன்ற உண்மையான அடையாளங்காட்டியை நீங்கள் குறிப்பிடலாம். இந்த வழக்கில் கட்டளை XREADGROUP குறிப்பிட்ட சந்தாதாரருக்கு (ஆலிஸ்) வழங்கப்பட்ட ஆனால் கட்டளையைப் பயன்படுத்தி இன்னும் ஒப்புக்கொள்ளப்படாத "நிலுவையில் உள்ள" நிலையுடன் கூடிய செய்திகளின் வரலாற்றை உங்களுக்குத் திருப்பித் தரும். XACK.

விருப்பம் இல்லாமல் ஐடி 0 ஐ உடனடியாகக் குறிப்பிடுவதன் மூலம் இந்த நடத்தையை நாம் சோதிக்கலாம் எண்ணிக்கை. நிலுவையில் உள்ள ஒரு செய்தியை, அதாவது ஆப்பிள் செய்தியைப் பார்ப்போம்:

> XREADGROUP GROUP mygroup Alice STREAMS mystream 0
1) 1) "mystream"
   2) 1) 1) 1526569495631-0
         2) 1) "message"
            2) "apple"

இருப்பினும், செய்தி வெற்றிகரமாக செயலாக்கப்பட்டதாக நாங்கள் உறுதிசெய்தால், அது இனி காட்டப்படாது:

> XACK mystream mygroup 1526569495631-0
(integer) 1
> XREADGROUP GROUP mygroup Alice STREAMS mystream 0
1) 1) "mystream"
   2) (empty list or set)

இப்போது பாப் எதையாவது படிக்க வேண்டும்:

> XREADGROUP GROUP mygroup Bob COUNT 2 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) 1526569498055-0
         2) 1) "message"
            2) "orange"
      2) 1) 1526569506935-0
         2) 1) "message"
            2) "strawberry"

எனது குழுவின் உறுப்பினரான பாப், இரண்டு செய்திகளுக்கு மேல் கேட்கவில்லை. சிறப்பு அடையாளங்காட்டி ">" காரணமாக வழங்கப்படாத செய்திகளை மட்டுமே கட்டளை தெரிவிக்கிறது. நீங்கள் பார்க்க முடியும் என, "ஆப்பிள்" செய்தி ஏற்கனவே ஆலிஸுக்கு வழங்கப்பட்டதால் காட்டப்படாது, எனவே பாப் "ஆரஞ்சு" மற்றும் "ஸ்ட்ராபெரி" ஆகியவற்றைப் பெறுகிறார்.

இந்த வழியில், ஆலிஸ், பாப் மற்றும் குழுவில் உள்ள வேறு எந்த சந்தாதாரரும் ஒரே ஸ்ட்ரீமில் இருந்து வெவ்வேறு செய்திகளைப் படிக்க முடியும். அவர்கள் செயலாக்கப்படாத செய்திகளின் வரலாற்றைப் படிக்கலாம் அல்லது செய்திகளை செயலாக்கப்பட்டதாகக் குறிக்கலாம்.

மனதில் கொள்ள வேண்டிய சில விஷயங்கள் உள்ளன:

  • சந்தாதாரர் செய்தியைக் கட்டளையாகக் கருதியவுடன் XREADGROUP, இந்தச் செய்தி "நிலுவையில் உள்ள" நிலைக்குச் சென்று அந்த குறிப்பிட்ட சந்தாதாரருக்கு ஒதுக்கப்படும். மற்ற குழு சந்தாதாரர்கள் இந்த செய்தியைப் படிக்க முடியாது.
  • முதலில் குறிப்பிடப்பட்டவுடன் சந்தாதாரர்கள் தானாகவே உருவாக்கப்படுவார்கள், அவற்றை வெளிப்படையாக உருவாக்க வேண்டிய அவசியமில்லை.
  • உதவியுடன் XREADGROUP நீங்கள் ஒரே நேரத்தில் பல வேறுபட்ட த்ரெட்களில் இருந்து செய்திகளைப் படிக்கலாம், இருப்பினும் இது வேலை செய்ய நீங்கள் முதலில் பயன்படுத்தும் ஒவ்வொரு திரிக்கும் ஒரே பெயரில் குழுக்களை உருவாக்க வேண்டும். XGROUP

தோல்விக்குப் பிறகு மீட்பு

சந்தாதாரர் தோல்வியிலிருந்து மீண்டு, "நிலுவையில் உள்ள" நிலையுடன் தனது செய்திகளின் பட்டியலை மீண்டும் படிக்கலாம். இருப்பினும், நிஜ உலகில், சந்தாதாரர்கள் இறுதியில் தோல்வியடையலாம். சந்தாதாரர் தோல்வியில் இருந்து மீள முடியாமல் போனால், சந்தாதாரரின் சிக்கிய செய்திகளுக்கு என்ன நடக்கும்?
நீங்கள் செய்திகளின் உரிமையாளரை மாற்ற வேண்டியிருக்கும் போது - நுகர்வோர் குழு இது போன்ற நிகழ்வுகளுக்குப் பயன்படுத்தப்படும் அம்சத்தை வழங்குகிறது.

நீங்கள் செய்ய வேண்டிய முதல் விஷயம் கட்டளையை அழைக்க வேண்டும் XPENDING, இது குழுவில் உள்ள அனைத்து செய்திகளையும் "நிலுவையில் உள்ளது" என்ற நிலையுடன் காண்பிக்கும். அதன் எளிமையான வடிவத்தில், கட்டளை இரண்டு வாதங்களுடன் அழைக்கப்படுகிறது: நூல் பெயர் மற்றும் குழு பெயர்:

> XPENDING mystream mygroup
1) (integer) 2
2) 1526569498055-0
3) 1526569506935-0
4) 1) 1) "Bob"
      2) "2"

குழு முழு குழுவிற்கும் ஒவ்வொரு சந்தாதாரருக்கும் செயலாக்கப்படாத செய்திகளின் எண்ணிக்கையைக் காட்டியது. ஆலிஸ் கோரிய ஒரே செய்தி உறுதிப்படுத்தப்பட்டதால், எங்களிடம் இரண்டு சிறந்த செய்திகள் மட்டுமே உள்ளன XACK.

கூடுதல் வாதங்களைப் பயன்படுத்தி மேலும் தகவலைக் கோரலாம்:

XPENDING {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]
{start-id} {end-id} - அடையாளங்காட்டிகளின் வரம்பு (நீங்கள் “-” மற்றும் “+” ஐப் பயன்படுத்தலாம்)
{count} — விநியோக முயற்சிகளின் எண்ணிக்கை
{consumer-name} - குழுவின் பெயர்

> XPENDING mystream mygroup - + 10
1) 1) 1526569498055-0
   2) "Bob"
   3) (integer) 74170458
   4) (integer) 1
2) 1) 1526569506935-0
   2) "Bob"
   3) (integer) 74170458
   4) (integer) 1

இப்போது ஒவ்வொரு செய்திக்கும் எங்களிடம் விவரங்கள் உள்ளன: ஐடி, சந்தாதாரர் பெயர், மில்லி விநாடிகளில் செயலற்ற நேரம் மற்றும் இறுதியாக டெலிவரி முயற்சிகளின் எண்ணிக்கை. பாப் இடமிருந்து எங்களிடம் இரண்டு செய்திகள் உள்ளன, அவை 74170458 மில்லி விநாடிகள், சுமார் 20 மணிநேரம் செயலற்ற நிலையில் உள்ளன.

வெறுமனே பயன்படுத்துவதன் மூலம் செய்தியின் உள்ளடக்கம் என்ன என்பதைச் சரிபார்க்க யாரும் எங்களைத் தடுக்கவில்லை என்பதை நினைவில் கொள்ளவும் XRANGE.

> XRANGE mystream 1526569498055-0 1526569498055-0
1) 1) 1526569498055-0
   2) 1) "message"
      2) "orange"

வாதங்களில் ஒரே அடையாளங்காட்டியை இரண்டு முறை மீண்டும் செய்ய வேண்டும். இப்போது எங்களுக்கு சில யோசனைகள் உள்ளன, 20 மணிநேர வேலையில்லா நேரத்திற்குப் பிறகு, பாப் ஒருவேளை குணமடைய மாட்டார் என்று ஆலிஸ் முடிவு செய்யலாம், மேலும் அந்த செய்திகளை வினவவும், பாப்பிற்காக அவற்றை மீண்டும் செயலாக்கவும் இது நேரம். இதற்கு நாம் கட்டளையைப் பயன்படுத்துகிறோம் XCLAIM:

XCLAIM {key} {group} {consumer} {min-idle-time} {ID-1} {ID-2} ... {ID-N}

இந்தக் கட்டளையைப் பயன்படுத்தி, உரிமையாளரை {consumer} ஆக மாற்றுவதன் மூலம் இதுவரை செயலாக்கப்படாத “வெளிநாட்டு” செய்தியைப் பெறலாம். இருப்பினும், குறைந்தபட்ச செயலற்ற நேரத்தையும் {min-idle-time} வழங்க முடியும். ஒரே செய்திகளின் உரிமையாளரை ஒரே நேரத்தில் இரண்டு வாடிக்கையாளர்கள் மாற்ற முயற்சிக்கும் சூழ்நிலையைத் தவிர்க்க இது உதவுகிறது:

Client 1: XCLAIM mystream mygroup Alice 3600000 1526569498055-0
Clinet 2: XCLAIM mystream mygroup Lora 3600000 1526569498055-0

முதல் வாடிக்கையாளர் வேலையில்லா நேரத்தை மீட்டமைத்து, டெலிவரி கவுண்டரை அதிகரிப்பார். எனவே இரண்டாவது வாடிக்கையாளர் அதைக் கோர முடியாது.

> XCLAIM mystream mygroup Alice 3600000 1526569498055-0
1) 1) 1526569498055-0
   2) 1) "message"
      2) "orange"

செய்தியை ஆலிஸ் வெற்றிகரமாகக் கோரினார், அவர் இப்போது செய்தியைச் செயல்படுத்தி அதை ஒப்புக்கொள்ள முடியும்.

மேலே உள்ள எடுத்துக்காட்டில் இருந்து, ஒரு வெற்றிகரமான கோரிக்கை செய்தியின் உள்ளடக்கங்களைத் திரும்பப் பெறுவதை நீங்கள் காணலாம். இருப்பினும், இது அவசியமில்லை. செய்தி ஐடிகளை மட்டும் திருப்பி அனுப்ப JUSTID விருப்பம் பயன்படுத்தப்படும். செய்தியின் விவரங்களில் நீங்கள் ஆர்வமில்லை மற்றும் கணினி செயல்திறனை அதிகரிக்க விரும்பினால் இது பயனுள்ளதாக இருக்கும்.

டெலிவரி கவுண்டர்

வெளியீட்டில் நீங்கள் பார்க்கும் கவுண்டர் XPENDING ஒவ்வொரு செய்தியின் டெலிவரிகளின் எண்ணிக்கை. அத்தகைய கவுண்டர் இரண்டு வழிகளில் அதிகரிக்கப்படுகிறது: ஒரு செய்தி வெற்றிகரமாக கோரப்பட்டால் XCLAIM அல்லது அழைப்பு பயன்படுத்தப்படும் போது XREADGROUP.

சில செய்திகள் பல முறை அனுப்பப்படுவது இயல்பானது. முக்கிய விஷயம் என்னவென்றால், எல்லா செய்திகளும் இறுதியில் செயலாக்கப்படும். சில சமயங்களில் ஒரு செய்தியைச் செயலாக்கும்போது சிக்கல்கள் ஏற்படுகின்றன, ஏனெனில் செய்தியே சிதைந்துள்ளது, அல்லது செய்தி செயலாக்கம் ஹேண்ட்லர் குறியீட்டில் பிழையை ஏற்படுத்துகிறது. இந்த வழக்கில், இந்த செய்தியை யாராலும் செயல்படுத்த முடியாது என்று மாறிவிடும். எங்களிடம் டெலிவரி முயற்சி கவுண்டர் இருப்பதால், இதுபோன்ற சூழ்நிலைகளைக் கண்டறிய இந்த கவுண்டரைப் பயன்படுத்தலாம். எனவே, டெலிவரி எண்ணிக்கை நீங்கள் குறிப்பிடும் அதிக எண்ணை அடைந்தவுடன், அத்தகைய செய்தியை வேறொரு நூலில் போட்டு, கணினி நிர்வாகிக்கு அறிவிப்பை அனுப்புவது புத்திசாலித்தனமாக இருக்கும்.

நூல் நிலை

அணி XINFO ஒரு நூல் மற்றும் அதன் குழுக்கள் பற்றிய பல்வேறு தகவல்களைக் கோர பயன்படுகிறது. எடுத்துக்காட்டாக, ஒரு அடிப்படை கட்டளை இதுபோல் தெரிகிறது:

> XINFO STREAM mystream
 1) length
 2) (integer) 13
 3) radix-tree-keys
 4) (integer) 1
 5) radix-tree-nodes
 6) (integer) 2
 7) groups
 8) (integer) 2
 9) first-entry
10) 1) 1524494395530-0
    2) 1) "a"
       2) "1"
       3) "b"
       4) "2"
11) last-entry
12) 1) 1526569544280-0
    2) 1) "message"
       2) "banana"

மேலே உள்ள கட்டளை குறிப்பிட்ட ஸ்ட்ரீம் பற்றிய பொதுவான தகவலைக் காட்டுகிறது. இப்போது சற்று சிக்கலான உதாரணம்:

> XINFO GROUPS mystream
1) 1) name
   2) "mygroup"
   3) consumers
   4) (integer) 2
   5) pending
   6) (integer) 2
2) 1) name
   2) "some-other-group"
   3) consumers
   4) (integer) 1
   5) pending
   6) (integer) 0

மேலே உள்ள கட்டளையானது குறிப்பிட்ட நூலின் அனைத்து குழுக்களுக்கும் பொதுவான தகவலைக் காட்டுகிறது

> XINFO CONSUMERS mystream mygroup
1) 1) name
   2) "Alice"
   3) pending
   4) (integer) 1
   5) idle
   6) (integer) 9104628
2) 1) name
   2) "Bob"
   3) pending
   4) (integer) 1
   5) idle
   6) (integer) 83841983

மேலே உள்ள கட்டளையானது குறிப்பிட்ட ஸ்ட்ரீம் மற்றும் குழுவின் அனைத்து சந்தாதாரர்களுக்கான தகவலைக் காட்டுகிறது.
நீங்கள் கட்டளை தொடரியல் மறந்துவிட்டால், உதவிக்காக கட்டளையையே கேட்கவும்:

> XINFO HELP
1) XINFO {subcommand} arg arg ... arg. Subcommands are:
2) CONSUMERS {key} {groupname}  -- Show consumer groups of group {groupname}.
3) GROUPS {key}                 -- Show the stream consumer groups.
4) STREAM {key}                 -- Show information about the stream.
5) HELP                         -- Print this help.

ஸ்ட்ரீம் அளவு வரம்பு

பல பயன்பாடுகள் தரவை எப்போதும் ஸ்ட்ரீமில் சேகரிக்க விரும்பவில்லை. ஒரு தொடரிழையில் அதிகபட்ச எண்ணிக்கையிலான செய்திகளை அனுமதிப்பது பெரும்பாலும் பயனுள்ளதாக இருக்கும். மற்ற சமயங்களில், குறிப்பிட்ட நூலின் அளவை எட்டும்போது, ​​எல்லா செய்திகளையும் ஒரு நூலில் இருந்து மற்றொரு நிலையான கடைக்கு நகர்த்துவது பயனுள்ளது. கட்டளையில் உள்ள MAXLEN அளவுருவைப் பயன்படுத்தி ஸ்ட்ரீமின் அளவைக் கட்டுப்படுத்தலாம் XADD:

> XADD mystream MAXLEN 2 * value 1
1526654998691-0
> XADD mystream MAXLEN 2 * value 2
1526654999635-0
> XADD mystream MAXLEN 2 * value 3
1526655000369-0
> XLEN mystream
(integer) 2
> XRANGE mystream - +
1) 1) 1526654999635-0
   2) 1) "value"
      2) "2"
2) 1) 1526655000369-0
   2) 1) "value"
      2) "3"

MAXLEN ஐப் பயன்படுத்தும் போது, ​​பழைய பதிவுகள் குறிப்பிட்ட நீளத்தை அடையும் போது தானாகவே நீக்கப்படும், எனவே ஸ்ட்ரீம் நிலையான அளவைக் கொண்டிருக்கும். இருப்பினும், இந்த வழக்கில் கத்தரித்தல் ரெடிஸ் நினைவகத்தில் மிகவும் திறமையான முறையில் ஏற்படாது. நீங்கள் பின்வருமாறு நிலைமையை மேம்படுத்தலாம்:

XADD mystream MAXLEN ~ 1000 * ... entry fields here ...

மேலே உள்ள எடுத்துக்காட்டில் உள்ள ~ வாதத்தின் அர்த்தம், ஸ்ட்ரீம் நீளத்தை ஒரு குறிப்பிட்ட மதிப்பிற்கு நாம் கட்டுப்படுத்த வேண்டிய அவசியமில்லை. எங்கள் எடுத்துக்காட்டில், இது 1000 ஐ விட அதிகமாகவோ அல்லது சமமாகவோ இருக்கலாம் (எடுத்துக்காட்டாக, 1000, 1010 அல்லது 1030). எங்கள் ஸ்ட்ரீம் குறைந்தது 1000 பதிவுகளைச் சேமிக்க வேண்டும் என்று நாங்கள் வெளிப்படையாகக் குறிப்பிட்டுள்ளோம். இது ரெடிஸுக்குள் நினைவக நிர்வாகத்தை மிகவும் திறமையாக ஆக்குகிறது.

தனி அணியும் உள்ளது XTRIM, அதையே செய்கிறது:

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

நிலையான சேமிப்பு மற்றும் நகலெடுத்தல்

ரெடிஸ் ஸ்ட்ரீம் ஒத்திசைவற்ற முறையில் ஸ்லேவ் நோட்களுக்குப் பிரதிபலிக்கப்பட்டு AOF (அனைத்து தரவுகளின் ஸ்னாப்ஷாட்) மற்றும் RDB (அனைத்து எழுதும் செயல்பாடுகளின் பதிவு) போன்ற கோப்புகளில் சேமிக்கப்படுகிறது. நுகர்வோர் குழுக்களின் நிலையின் பிரதியும் ஆதரிக்கப்படுகிறது. எனவே, ஒரு செய்தி முதன்மை முனையில் "நிலுவையிலுள்ள" நிலையில் இருந்தால், ஸ்லேவ் நோட்களிலும் இந்த செய்தி அதே நிலையைக் கொண்டிருக்கும்.

ஸ்ட்ரீமில் இருந்து தனிப்பட்ட கூறுகளை அகற்றுதல்

செய்திகளை நீக்க ஒரு சிறப்பு கட்டளை உள்ளது XDEL. கட்டளை தொடரின் பெயரைப் பெறுகிறது, அதைத் தொடர்ந்து செய்தி ஐடிகள் நீக்கப்பட வேண்டும்:

> XRANGE mystream - + COUNT 2
1) 1) 1526654999635-0
   2) 1) "value"
      2) "2"
2) 1) 1526655000369-0
   2) 1) "value"
      2) "3"
> XDEL mystream 1526654999635-0
(integer) 1
> XRANGE mystream - + COUNT 2
1) 1) 1526655000369-0
   2) 1) "value"
      2) "3"

இந்த கட்டளையைப் பயன்படுத்தும் போது, ​​உண்மையான நினைவகம் உடனடியாக வெளியிடப்படாது என்பதை நீங்கள் கணக்கில் எடுத்துக்கொள்ள வேண்டும்.

பூஜ்ஜிய நீள நீரோடைகள்

ஸ்ட்ரீம்கள் மற்றும் பிற ரெடிஸ் தரவு கட்டமைப்புகளுக்கு இடையே உள்ள வித்தியாசம் என்னவென்றால், பிற தரவு கட்டமைப்புகளுக்குள் உறுப்புகள் இல்லாதபோது, ​​பக்க விளைவுகளாக, தரவு அமைப்பு நினைவகத்திலிருந்து அகற்றப்படும். எனவே, எடுத்துக்காட்டாக, ZREM அழைப்பு கடைசி உறுப்பை அகற்றும் போது வரிசைப்படுத்தப்பட்ட தொகுப்பு முற்றிலும் அகற்றப்படும். அதற்கு பதிலாக, எந்த கூறுகளும் உள்ளே இல்லாமல் நினைவகத்தில் இருக்க அனுமதிக்கப்படுகிறது.

முடிவுக்கு

ரெடிஸ் ஸ்ட்ரீம் செய்தி தரகர்கள், செய்தி வரிசைகள், ஒருங்கிணைக்கப்பட்ட பதிவு மற்றும் வரலாற்றைக் காக்கும் அரட்டை அமைப்புகளை உருவாக்குவதற்கு ஏற்றது.

நான் ஒருமுறை சொன்னது போல் நிக்லஸ் விர்த், நிரல்கள் அல்காரிதம்கள் மற்றும் தரவு கட்டமைப்புகள், மேலும் ரெடிஸ் ஏற்கனவே உங்களுக்கு இரண்டையும் வழங்குகிறது.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்