Ko si več delavcev deli sklad prek Redisa, lahko urejena množica izvede preprosto politiko: izbere ustrezni proxy z najmanj zabeleženimi dodelitvami. Shranite identifikator proxyja kot člana in število njegovih dodelitev kot rezultat.

Za sklad, ki streže dovoljenim javnim zahtevam, lahko seznam brezplačnih proxyjev zagotovi kandidate za končne točke za oceno po pravilih ustreznosti tega sklada. Inicializirajte ustrezne člane z dogovorjenim začetnim številom. Nato naredite izbiro in povečanje eno strežniško operacijo:

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

Posredujte ključ urejene množice kot edini ključni argument skripta prek vmesnika EVAL vašega odjemalca Redis. Prazen sklad vrne rezultat null, ki ga mora aplikacija obdelati brez pošiljanja zahteve.

Zakaj združiti oba ukaza?

Ločena branja in povečanja omogočajo dvema delavcema, da vidita isti minimum, preden ga kdo posodobi. Redis izvaja skript Lua atomsko, zato drug delavec ne more vstaviti izbire med branje in povečanje tega skripta. Skript naj bo kratek, ker njegovo izvajanje blokira drugo delo Redisa.

ZRANGE vrne najnižji rezultat prvi; enaki rezultati se razrešijo po vrstnem redu članov, ne naključno. ZINCRBY poveča rezultat izbranega člana za ena za naslednjo dodelitev.

Določite, kaj rezultat pomeni

To šteje dodelitve, vključno z dodelitvijo, katere omrežna zahteva pozneje ne uspe. Ne meri zakasnitve, uspešnih zahtev ali dela, ki poteka. Ponovna izbira edinega ustreznega člana je še vedno mogoča; skript si ga ne pridrži izključno.

Ohranjajte ustreznost s pravili zdravja in politike sklada. Če člana odstranite in pozneje obnovite, se odločite, ali naj se njegovo zgodovinsko število ohrani. Zagon obnovljenega proxyja od nič lahko usmeri dodelitve nanj, dokler ne dohiti.

Politika najmanjše sočasnosti potrebuje drugačen življenjski cikel, vključno z dokončanjem in obravnavo zapuščenih opravil. Tega kumulativnega števca ne razlagajte kot ta življenjski cikel.

Sorodni članki