Редис ЗСЦАН

Redis Zscan



Итерирајте преко чланова сортираног скупа

Као што сви знате, Редис сортирани скупови су изведени из регуларних скупова где је сваки члан поређан према вредности резултата у растућем редоследу. Ако два или више чланова имају исту вредност резултата, они су поређани по лексикографском редоследу. Обично се чланови и резултати могу директно преузети помоћу команде ЗРАНГЕ. Када имате велики сортирани скуп са хиљадама чланова, команда ЗРАНГЕ може блокирати сервер на дуже време као што су команде СМЕМБЕРС и КЕИС, што је недостатак. Дакле, Редис нуди специјалну команду под називом ЗСЦАН која је изведена из команде СЦАН за итерацију преко чланова сортираног скупа. Пошто ЗСЦАН команда наслеђује команду СЦАН, скоро сва понашања су иста као наредба СЦАН опште намене.







Као на слици, команда СЦАН је итератор заснован на курсору. Дакле, потребна је једна или више итерација да би се обезбедили сви предмети Редис колекције. Пошто ЗСЦАН команда наслеђује родитељску СЦАН команду, понашање је исто. У овом водичу, синтакса и случајеви коришћења ЗСЦАН команде биће детаљно размотрени.



Команда ЗСЦАН

ЗСЦАН команда је итератор заснован на курсору који започиње итерацију са курсором 0. Након тога, у свакој итерацији, враћа нула или више сортираних чланова скупа заједно са следећим курсором који треба да се користи као курсор за следећи позив команде. Ако је враћени курсор 0 након једне или више итерација, то значи да је процес скенирања завршен. Сви сортирани чланови скупа се враћају у овом тренутку. Овај процес се назива пуна итерација. Као што сте могли да видите, ЗСЦАН команда задржава своје стање само помоћу курсора што доводи до ограничене свести о стању. Стога су следећи недостаци повезани са командом ЗСЦАН.



  • Исти елемент се може вратити у више итерација.
  • Ако члан није присутан на почетку процеса скенирања, постоји вероватноћа да се тај члан неће вратити током пуне итерације.

Осим тога, не постоји гаранција за број враћених чланова. У неким случајевима, ако је сортирани скуп веома мали, сви чланови могу бити враћени у првој итерацији. Зато што Редис користи посебан формат кодирања са једном алокацијом да задржи чланове док се не достигне максимални број ставки. Команда ЗСЦАН може да врати курсор само ако је скенирана структура података представљена као хеш табела.





Синтакса:
Команда ЗСЦАН користи скоро исту синтаксу као и команда СЦАН осим што прихвата сортирани сет кључ као први аргумент. Синтакса команде са дозвољеним аргументима је следећа:

ЗСЦАН курсор сортед_сет_кеи [ МАТЦХ образац ] [ ЦОУНТ мембер_цоунт ]

сортед_сет_кеи : Кључ сортираног скупа.
Курсор : Вредност курсора почиње од 0 и завршава се на 0 ако је потпуна итерација.



Следећи аргументи су опциони:

УТАКМИЦА : Образац за подударање приликом преузимања елемената у свакој итерацији. Враћају се само подударни чланови.
ЦОУНТ : Приближан број чланова који ће бити враћени у свакој итерацији.

Враћени скуп резултата по итерацији садржи неколико елемената. Први део је 64-битни неозначени цео број који представља курсор који треба да се пренесе у следећи позив. Следећи део је низ чланова и повезаних резултата.

Случај употребе 1 – Преузми све чланове и њихове завршене мисије онлајн игре

Претпоставимо да компанија за онлајн игре одржава ранг листу користећи Редис сортирани сет. Пошто велики корисници активно играју игру, потребан им је начин да преузму сваког играча и њихов придружени резултат који представља број завршених мисија. Обавезно је извршити преузимање без блокирања сервера. Дакле, препорука је да користите ЗСЦАН команду на следећи начин:

Прво, креирамо сортирани сет са неким играчима и завршеним бројем мисија.

задд ЛеадерБоард 12 Играч 6: Џон 4 Играч 2: Мери 22 Играч 1: Пател петнаест Играч: Једанаест 23 Играч 5: Анн 30 Играч 7: Оштар 23 Плаиер12: Абби два Играч 13: Ники 6 Играч 9: Џереми 7 Плаиер45:Кина

Сада можемо итерирати преко чланова сортираног скупа на следећи начин:

зсцан ЛеадерБоард 0

Излаз:

Вредност курсора је 0 у враћеном скупу резултата, што значи да су сви чланови враћени на крају прве итерације. У овом случају, пошто је број чланова мали, Редис представља ове чланове користећи кодирање са једном алокацијом. Стога, док се не достигне максимална величина пакета или број чланова, команда враћа све чланове у сортираном скупу. Ово се зове пуна итерација. Јер на крају прве итерације добијамо свих десет чланова и њихове резултате. Ако имамо стотине чланова, то је представљено као хеш табела у меморији. Дакле, потребно је неколико итерација да се врате сви чланови.

Параметар ЦОУНТ се може користити за ограничавање броја чланова враћених у итерацији. Подразумевано, овај аргумент је постављен на 10. Ако се сортирани скуп састоји од стотина чланова, он је представљен хеш табелом у меморији. Дакле, број враћених чланова је око десет по итерацији. Вредност аргумента ЦОУНТ се занемарује ако је сортирани скуп премали.

Случај употребе 2 – Пронађите играче чије име почиње на слово „Ј“

Команда ЗСЦАН се може користити за филтрирање враћених чланова на основу подударања шаблона. У том случају, аргумент МАТЦХ мора бити специфициран.

Хајде да користимо исти пример из претходног случаја употребе. Услов је да се покупе играчи чије име почиње на слово „Ј“. То је само да имплементирамо следећу цоол функцију у вези са игром. Аргумент МАТЦХ се може навести на следећи начин:

зсцан ЛеадерБоард 0 утакмица * Ј *

Ово би идеално требало да врати два члана чија су имена Џереми и Џон.

Закључак

Укратко, ЗСЦАН команда се користи за понављање чланова и резултата Редис сортираног скупа. Ова команда се понаша исто као и команда СЦАН, осим што команда ЗСЦАН прихвата сет кључ као први аргумент. Као што је објашњено у случајевима коришћења, ЗСЦАН команда се може користити на различите начине навођењем аргумената МАТЦХ и ЦОУНТ где можете да преузмете чланове и придружене резултате који одговарају одређеном шаблону и ограничите враћени број чланова по итерацији. Све у свему, команда ЗСЦАН може бити корисна при преузимању чланова сортираног скупа без блокирања сервера или клијента.