Redis ZSCAN

Redis Zscan



Atkārtojiet pāri sakārtotas kopas dalībniekiem

Kā jūs visi zināt, Redis sakārtotās kopas tiek iegūtas no parastajām kopām, kur katrs dalībnieks ir sakārtots pēc tā punktu vērtības augošā secībā. Ja diviem vai vairākiem dalībniekiem ir vienāda punktu vērtība, tie tiek sakārtoti pēc leksikogrāfiskās secības. Parasti dalībniekus un rezultātus var tieši izgūt, izmantojot komandu ZRANGE. Ja jums ir liels sakārtots komplekts ar tūkstošiem dalībnieku, komanda ZRANGE var bloķēt serveri uz ilgu laiku, piemēram, komandas SMEMBERS un KEYS, kas ir trūkums. Tātad, Redis piedāvā īpašu komandu ar nosaukumu ZSCAN, kas ir atvasināta no komandas SCAN, lai atkārtotu sakārtotas kopas dalībniekus. Tā kā komanda ZSCAN tiek mantota no komandas SCAN, gandrīz visas darbības ir tādas pašas kā vispārējas nozīmes komandai SCAN.







Tāpat kā dotajā attēlā, komanda SCAN ir uz kursoru balstīts iterators. Tādējādi ir nepieciešama viena vai vairākas iterācijas, lai nodrošinātu visus Redis kolekcijas vienumus. Tā kā komanda ZSCAN tiek mantota no vecāku komandas SCAN, darbība ir tāda pati. Šajā rokasgrāmatā tiks detalizēti apskatīta komandas ZSCAN sintakse un lietošanas gadījumi.



ZSCAN komanda

Komanda ZSCAN ir uz kursoru balstīts iterators, kas sāk iterāciju ar 0. kursoru. Pēc tam katrā iterācijā tas atgriež nulli vai vairāk sakārtotu kopas dalībnieku kopā ar nākamo kursoru, kas jāizmanto kā kursors nākamajam komandu izsaukumam. Ja pēc vienas vai vairākām iterācijām atgrieztais kursors ir 0, tas nozīmē, ka skenēšanas process ir beidzies. Šajā brīdī tiek atgriezti visi sakārtotie kopas dalībnieki. Šo procesu sauc par pilnu iterāciju. Kā redzējāt, komanda ZSCAN saglabā savu stāvokli, tikai izmantojot kursoru, kas noved pie ierobežotas stāvokļa izpratnes. Tāpēc ar komandu ZSCAN ir saistīti šādi trūkumi.



  • Viens un tas pats elements var atgriezties vairākās iterācijās.
  • Ja dalībnieks nav klāt skenēšanas procesa sākumā, pastāv iespēja, ka šis dalībnieks netiks atgriezts pilnas iterācijas laikā.

Turklāt nav garantijas par atgriezto dalībnieku skaitu. Dažos gadījumos, ja sakārtotā kopa ir ļoti maza, visi dalībnieki var tikt atgriezti pirmajā iterācijā. Tā kā Redis izmanto īpašu viena piešķīruma pakotnes kodēšanas formātu, lai turētu dalībniekus, līdz tiek sasniegts maksimālais vienumu skaits. Komanda ZSCAN var atgriezt kursoru tikai tad, ja skenētā datu struktūra ir attēlota kā jaucēj tabula.





Sintakse:
Komanda ZSCAN izmanto gandrīz tādu pašu sintakse kā komanda SCAN, izņemot to, ka tā pieņem sakārtotu kopas atslēgu kā pirmo argumentu. Komandu sintakse ar atļautajiem argumentiem ir šāda:

ZSCAN sorted_set_key kursors [ MATCH modelis ] [ COUNT dalībnieku_skaits ]

šķirots_set_key : sakārtotā komplekta atslēga.
Kursors : Kursora vērtība sākas no 0 un beidzas ar 0, ja tā ir pilna iterācija.



Tālāk norādītie argumenti nav obligāti.

MATCH : modelis, kas jāatbilst, izgūstot elementus katrā iterācijā. Tiek atgriezti tikai atbilstošie dalībnieki.
SKAITĪT : aptuvenais dalībnieku skaits, kas jāatgriež katrā iterācijā.

Atgrieztā rezultātu kopa katrā iterācijā satur pāris elementus. Pirmā daļa ir 64 bitu neparakstīts vesels skaitlis, kas apzīmē kursoru, kas jānodod nākamajā izsaukumā. Nākamā daļa ir dalībnieku un saistīto punktu klāsts.

1. lietošanas gadījums — izgūstiet visus tiešsaistes spēles dalībniekus un viņu izpildītos uzdevumus

Pieņemsim, ka tiešsaistes spēļu uzņēmums uztur līderu sarakstu, izmantojot Redis sakārtoto komplektu. Tā kā spēli aktīvi spēlē milzīgi lietotāji, viņiem ir nepieciešams veids, kā izgūt katru spēlētāju un ar to saistīto punktu skaitu, kas ir izpildīto misiju skaits. Ir jāveic izguve, nebloķējot serveri. Tātad, ieteikums ir izmantot ZSCAN komandu šādi:

Pirmkārt, mēs izveidojam sakārtotu komplektu ar dažiem spēlētājiem un izpildīto misiju skaitu.

zadd LeaderBoard 12 6. spēlētājs: Jānis 4 2. spēlētājs: Marija 22 Spēlētājs1: Patels piecpadsmit Spēlētājs: vienpadsmit 23 Spēlētājs 5: Ann 30 Spēlētājs 7: Skarbi 23 Spēlētājs 12: Abby divi Spēlētājs 13: Nikijs 6 9. spēlētājs: Džeremijs 7 Spēlētājs 45: Kina

Tagad mēs varam atkārtot sakārtotās kopas dalībniekus šādi:

zscan LeaderBoard 0

Izvade:

Kursora vērtība ir 0 atgrieztajā rezultātu kopā, kas nozīmē, ka visi dalībnieki tiek atgriezti pirmās iterācijas beigās. Šajā gadījumā, tā kā dalībnieku skaits ir mazs, Redis pārstāv šos dalībniekus, izmantojot viena piešķīruma pakotnes kodējumu. Tāpēc, līdz tiek sasniegts maksimālais iepakojuma lielums vai dalībnieku skaits, komanda atgriež visus dalībniekus sakārtotajā kopā. To sauc par pilnu iterāciju. Jo pirmās iterācijas beigās mēs saņemam visus desmit dalībniekus un viņu punktu skaitu. Ja mums ir simtiem dalībnieku, atmiņā tas tiek attēlots kā hash tabula. Tātad, lai atgrieztu visus dalībniekus, ir nepieciešamas vairākas iterācijas.

Parametru COUNT var izmantot, lai ierobežotu iterācijā atgriezto dalībnieku skaitu. Pēc noklusējuma šis arguments ir iestatīts uz 10. Ja sakārtotā kopa sastāv no simtiem dalībnieku, tā tiek attēlota ar hash tabulu atmiņā. Tātad atgriezto dalībnieku skaits vienā iterācijā ir aptuveni desmit. Argumenta COUNT vērtība tiek ignorēta, ja sakārtotā kopa ir pārāk maza.

Izmantojiet 2. gadījumu — atnesiet spēlētājus, kuru vārds sākas ar burtu “J”

ZSCAN komandu var izmantot, lai filtrētu atgrieztos dalībniekus, pamatojoties uz modeļa atbilstību. Tādā gadījumā ir jānorāda arguments MATCH.

Izmantosim to pašu piemēru no iepriekšējā lietošanas gadījuma. Prasība ir atnest spēlētājus, kuru vārds sākas ar burtu “J”. Tas ir tikai, lai ieviestu nākamo lielisko funkciju, kas saistīta ar spēli. MATCH argumentu var norādīt šādi:

zscan LeaderBoard 0 atbilst * *

Ideālā gadījumā būtu jāatgriež divi dalībnieki, kuru vārdi ir Džeremijs un Džons.

Secinājums

Rezumējot, komanda ZSCAN tiek izmantota, lai atkārtotu Redis sakārtotās kopas dalībniekus un rezultātus. Šī komanda darbojas tāpat kā komanda SCAN, izņemot to, ka komanda ZSCAN pieņem set taustiņu kā pirmo argumentu. Kā minēts lietošanas gadījumos, komandu ZSCAN var izmantot dažādos veidos, norādot argumentus MATCH un COUNT, kur var izgūt dalībniekus un saistītos rādītājus, kas atbilst konkrētam modelim, un ierobežot atgriezto dalībnieku skaitu iterācijā. Kopumā komanda ZSCAN var būt noderīga, izgūstot sakārtotas kopas dalībniekus, nebloķējot serveri vai klientu.