Kui mitu töötajat jagavad Redis'e kaudu ühist kogumit, saab sorteeritud hulk rakendada lihtsat poliitikat: valida sobiv puhverserver, millel on kõige vähem kirjendatud määramisi. Salvestage puhverserveri identifikaator liikmena ja selle määramiste arv skoorina.

Kogumi jaoks, mis teenindab lubatud avalikke päringuid, võib tasuta puhverserverite loend pakkuda lõpp-punktide kandidaate, mida hinnata selle kogumi sobivusreeglite järgi. Lähtestage sobivad liikmed kokkulepitud algse arvuga. Seejärel tehke valik ja suurendus ühe serveripoolse toiminguna:

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

Edastage sorteeritud hulga võti skripti ainsa võtmeargumendina oma Redis-kliendi EVAL-liidese kaudu. Tühi kogum annab null-tulemuse, mida rakendus peab käsitlema päringut tegemata.

Miks need kaks käsku ühendada?

Eraldi lugemised ja suurendused lasevad kahel töötajal näha sama miinimumi enne, kui kumbki selle uuendab. Redis täidab Lua-skripti aatomselt, seega ei saa teine töötaja selle skripti lugemise ja suurenduse vahele valikut sisestada. Hoidke skript lühike, sest selle täitmine blokeerib muud Redise tööd.

ZRANGE tagastab madalaima skoori esimesena; võrdsed skoorid lahendatakse liikmete järjestusega, mitte juhuslikult. ZINCRBY suurendab valitud liikme skoori ühe võrra järgmise määramise jaoks.

Määratlege, mida skoor tähendab

See loeb määramisi, sealhulgas määramist, mille võrgupäring hiljem ebaõnnestub. See ei mõõda latentsust, edukaid päringuid ega parajasti käimasolevat tööd. Ainsa sobiva liikme korduv valimine on endiselt võimalik; skript ei reserveeri seda ainult endale.

Hoidke sobivust kogumi tervise- ja poliitikareeglitega. Kui eemaldate liikme ja taastate selle hiljem, otsustage, kas selle ajalooline arv tuleks säilitada. Taastatud puhverserveri alustamine nullist võib koondada määramised sellele, kuni see järele jõuab.

Vähima samaaegsuse poliitika nõuab teistsugust elutsüklit, sealhulgas lõpetamist ja hüljatud tööde käsitlemist. Ärge tõlgendage seda kumulatiivset loendurit selle elutsüklina.

Seotud artiklid