Бірнеше жұмысшы Redis арқылы бір пулды бөліссе, реттелген жиын қарапайым саясатты жүзеге асыра алады: ең аз тіркелген бөлуі бар жарамды проксиді таңдау. Прокси идентификаторын мүше, ал оның бөлу санын ұпай ретінде сақтаңыз.

Рұқсат етілген жалпыға ортақ сұраныстарға қызмет көрсететін пул үшін тегін прокси тізімі сол пулдың жарамдылық ережелері бойынша бағаланатын соңғы нүкте үміткерлерін ұсына алады. Жарамды мүшелерді келісілген бастапқы санмен бастаңыз. Содан кейін таңдау мен арттыруды бір серверлік операция жасаңыз:

local chosen = redis.call('ZRANGE', KEYS[1], 0, 0)[1]
if not chosen then
    return nil
end

redis.call('ZINCRBY', KEYS[1], 1, chosen)
return chosen

Реттелген жиын кілтін скрипттің жалғыз кілт аргументі ретінде Redis клиентіңіздің EVAL интерфейсі арқылы жіберіңіз. Бос пул null нәтиже береді, қолданба оны сұраныс жасамай өңдеуі керек.

Неге екі команданы біріктіру керек?

Бөлек оқу мен арттыру екі жұмысшыға біреуі жаңартпай тұрып бірдей минимумды көруге мүмкіндік береді. Redis Lua скриптін атомды түрде орындайды, сондықтан басқа жұмысшы бұл скрипттің оқуы мен арттыруы арасына таңдау қоя алмайды. Скриптті қысқа ұстаңыз, себебі оның орындалуы басқа Redis жұмысын блоктайды.

ZRANGE ең төмен ұпайды бірінші қайтарады; тең ұпайлар мүше ретімен шешіледі, кездейсоқ емес. ZINCRBY таңдалған мүшенің ұпайын келесі бөлу үшін бірге арттырады.

Ұпай нені білдіретінін анықтаңыз

Бұл бөлулерді санайды, оның ішінде желілік сұранысы кейін сәтсіз аяқталатын бөлу де бар. Ол кідірісті, сәтті сұраныстарды немесе қазір жүріп жатқан жұмысты өлшемейді. Жалғыз жарамды мүшені қайта-қайта таңдау әлі де мүмкін; скрипт оны тек өзіне қалдырмайды.

Жарамдылықты пулдың денсаулық және саясат ережелерімен ұстаңыз. Мүшені алып тастап, кейін қалпына келтірсеңіз, оның тарихи санын сақтау керек пе, соны шешіңіз. Қалпына келтірілген проксиді нөлден бастау ол қуып жеткенше бөлулерді соған шоғырландыруы мүмкін.

Ең аз бірмезгілдік саясаты басқа өмірлік циклді талап етеді, оның ішінде аяқталу мен тасталған жұмыстарды өңдеу бар. Бұл жинақталған санағышты сол өмірлік цикл деп түсінбеңіз.

Қатысты мақалалар