Երբ մի քանի աշխատողներ 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-ն ընտրված անդամի միավորը մեծացնում է մեկով՝ հաջորդ հատկացման համար։

Սահմանեք, թե ինչ է նշանակում միավորը

Սա հաշվում է հատկացումներ, ներառյալ այն հատկացումը, որի ցանցային հարցումը հետագայում ձախողվում է։ Այն չի չափում ուշացում, հաջող հարցումներ կամ ընթացիկ աշխատանք։ Միակ թույլատրելի անդամին կրկին ընտրելը դեռ հնարավոր է. սկրիպտը այն բացառապես չի վերապահում։

Պահպանեք թույլատրելիությունը լողավազանի առողջության և քաղաքականության կանոններով։ Եթե հեռացնեք անդամին և ավելի ուշ վերականգնեք, որոշեք՝ արդյոք պահել նրա պատմական քանակը։ Վերականգնված պրոքսին զրոյից սկսելը կարող է կենտրոնացնել հատկացումները նրա վրա, մինչ այն հասնում է։

Ամենաքիչ միաժամանակյա քաղաքականությունը պահանջում է այլ կենսացիկլ՝ ներառյալ ավարտը և լքված աշխատանքների մշակումը։ Մի՛ մեկնաբանեք այս կուտակային հաշվիչը որպես այդ կենսացիկլ։

Առնչվող հոդվածներ