Wakati wafanyakazi kadhaa wanashiriki dimbwi kupitia Redis, seti iliyopangwa inaweza kutekeleza sera rahisi: chagua proksi inayostahiki yenye ugawaji mdogo zaidi uliorekodiwa. Hifadhi kitambulisho cha proksi kama mwanachama na hesabu ya ugawaji wake kama alama.

Kwa dimbwi linalohudumia maombi ya umma yaliyoruhusiwa, orodha ya proksi bila malipo inaweza kutoa wagombea wa mwisho wa huduma ili kutathminiwa kwa kanuni za ustahiki za dimbwi hilo. Anzisha wanachama wanaostahiki kwa hesabu ya awali iliyokubaliwa. Kisha ufanye uteuzi na ongezeko kuwa operesheni moja ya upande wa seva:

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

Pitisha ufunguo wa seti iliyopangwa kama hoja pekee ya ufunguo ya script kupitia kiolesura cha EVAL cha mteja wako wa Redis. Dimbwi tupu hutoa matokeo ya null ambayo programu lazima ishughulikie bila kufanya ombi.

Kwa nini kuunganisha amri mbili?

Usomaji na ongezeko tofauti huwaruhusu wafanyakazi wawili kuona kiwango cha chini kimoja kabla ya yeyote kuvisasisha. Redis hutekeleza script ya Lua kwa njia ya atomiki, kwa hivyo mfanyakazi mwingine hawezi kuingiza uteuzi kati ya usomaji na ongezeko la script hii. Weka script fupi kwa sababu utekelezaji wake huzuia kazi nyingine ya Redis.

ZRANGE hurudisha alama ya chini kwanza; alama sawa hutatuliwa kwa mpangilio wa wanachama, sio kwa bahati nasibu. ZINCRBY huongeza alama ya mwanachama aliyechaguliwa kwa moja kwa ugawaji unaofuata.

Eleza maana ya alama

Hii huhesabu ugawaji, ikiwa ni pamoja na ugawaji ambao ombi lake la mtandao linashindikana baadaye. Haipimi ucheleweshaji, maombi yaliyofanikiwa au kazi inayoendelea. Bado inawezekana kuchagua mwanachama pekee anayestahiki mara kwa mara; script haimhifadhi kipekee.

Dumisha ustahiki kwa kanuni za afya na sera za dimbwi. Ukiondoa mwanachama na kumrejesha baadaye, amua ikiwa hesabu yake ya kihistoria inapaswa kubaki. Kuanza proksi iliyorejeshwa kwa sifuri kunaweza kukusanya ugawaji juu yake wakati inapata kasi.

Sera ya uwiano wa chini zaidi inahitaji mzunguko tofauti wa maisha, ikiwa ni pamoja na kukamilisha na kushughulikia kazi zilizoachwa. Usitafsiri kihesabu hiki cha mkusanyiko kama mzunguko huo wa maisha.

Makala zinazohusiana