Mis puudutab redis'i, siis kõik kasutavad seda tihti ja kõige sagedamini kasutatakse andmete vahemällu salvestamist.
Läbivaatamine
Alates redis 2.6.0-st on redisel sisseehitatud Lua tõlgendaja ja see annab eval-käsku Lua skripti hindamise parsimiseks.
Süntaks: eval script numkeys keys args
Parameetrid:
Hindamine — Redis annab käske lua skripti parsimiseks
Stsenaarium — Lua Script
numkeys — Määrab võtmete parameetrite hulga võtmete arvu
keys — Võtmenime parameetrite komplekt, mida esindab globaalne muutuja KEYS massiivi, mis algab indeksiga 1
args — võtme-väärtuse parameetrite kogum, mida esindab globaalsete muutujate ARGV massiivi, mis algab indeksiga 1
Lua kasutamise eelised Redis
Vähenda võrgu koormust. Mitut päringut saab korraga saata skriptide kujul, et vähendada võrgu latentsust Aatomimanipulatsioon. Redis käivitab kogu skripti tervikuna, vahepeal ei lisata muid käske. Seetõttu ei ole skriptimise käigus vaja muretseda võistlustingimuste ja tehingute pärast. Taastatud. Kliendi poolt saadetud sammud salvestatakse järjepidevalt Redis'isse, et teised kliendid saaksid skripti uuesti kasutada ilma, et peaksid sama loogika täitmiseks koodi kasutama.
Kirja aatomilisus
Lua skriptidel ei tohi olla ajamahukaid operatsioone ega surnud tsükliid, vastasel juhul Redis ei võta vastu teisi käske ja käivitab, et skripti peatada
Redis kasutab kõigi skriptide käivitamiseks ühte Lua interpretaatorit ja tagab, et skriptid täidetakse aatomipõhiselt.See tähendab, et kui skript töötab, ei käivitata teisi skripte ega redis-käske! Seega, kui praegune skript töötab aeglaselt, ei pruugi server käsku täita, kuna see on hõivatud, näiteks:
Igal skriptil on maksimaalne täitmise ajapiirang, vaikimisi väärtus on 5s. Maksimaalset täitmisaega kontrollib konfiguratsioonifaili redis.conf lua-time-limit valik või otse config get ja config set käskude abil. Kui skripti täitmine jõuab maksimaalse täitmisajani, ei lõpeta Redis seda aktiivselt, vaid täidab järgmised sammud:
(1) Redis registreerib, et stsenaariumi aeg hakkab otsa saama
(2) Redis hakkab uuesti vastu võtma päringuid teistelt klientidelt, kuid aktsepteerib ainult skripti tapmiskäskude täitmist ja nosave'i sulgemist.
(3) Kui skript teeb ainult lugemistoiminguid, kasuta skripti tapmiskäsku skripti koheseks peatamiseks; Kui skript teostab kirjutamistoimingu, siis ainult shutdown save/nosave käsk saab serverit peatada, et takistada praeguste andmete kirjutamist kettale. (Sel hetkel on server maas ja andmeid ei salvestata)
näide
Käivita skript, parameetrid on 2 võtit ja väärtust ning käsk on järgmine:
Deadloop skriptide puhul põhjustab järgmise skripti käivitamine seda, et redis ei suuda teisi käske töödelda ja jääb kinni:
Proovi kasutada skripti, et lisada tüübi stringi andmeid järgmise käsuga:
Käivita keerukamaid skripte, kui võtme väärtus on võrdne sisestatud väärtusega, siis kustuta vahemälu, muidu tee midagi, käsk on järgmine:
Rakendamise tulemused on järgmised:
(Lõpp)
|