Co se týče redis, často ho používá každý, a nejpoužívanějším scénářem je data cache.
přezkoumání
Od redis 2.6.0 má redis vestavěný interpret Lua a poskytuje příkaz eval pro analýzu hodnocení Lua skriptu.
Syntaxe: eval script numkeys keys args
Parametry:
eval — Redis poskytuje příkazy pro zpracování lua skriptu
Skript — Lua Script
numkeys — Specifikuje počet klíčů v sadě parametrů názvů klíčů
keys — Sada parametrů názvů klíče, reprezentovaná polem globální proměnné KEYS, začínající indexem 1
args — Sada klíčových parametrů, reprezentovaných polem globálních proměnných ARGV, začínajících indexem 1
Výhody použití Lua v Redis
Snižte zátěž sítě. Více požadavků lze posílat současně ve formě skriptů ke snížení latence sítě Atomová manipulace. Redis spustí celý skript jako celek, bez dalších příkazů vložených mezi ně. Proto není třeba se během skriptování obávat podmínek závodu a transakcí. Znovu přijat. Kroky odeslané klientem jsou trvale ukládány v redisu, aby ostatní klienti mohli skript znovu použít, aniž by museli používat kód k dokončení stejné logiky.
Atomicita skriptu
Lua skripty nemohou mít časově náročné operace ani mrtvé smyčky, jinak redis nepřijme jiné příkazy a nespustí se tak, aby skript zastavil
Redis používá jediný interpret Lua pro spuštění všech skriptů a zajišťuje, že skripty jsou vykonávány atomicky.To znamená, že když skript běží, žádné další skripty ani příkazy redis se nespouštějí! Pokud tedy aktuální skript běží pomalu, server nemusí být schopen příkaz spustit, protože je zaneprázdněný, například:
Každý skript má maximální časový limit, výchozí hodnota je 5s. Maximální doba provedení je řízena volbou lua-time-limit v konfiguračním souboru redis.conf, nebo přímo pomocí příkazů config get a config set. Když skript dosáhne svého maximálního času vykonání, Redis jej aktivně neukončí, ale provádí následující kroky:
(1) Redis zaznamenává, že skript dochází
(2) Redis začne znovu přijímat požadavky od ostatních klientů, ale přijímá pouze provádění příkazů ke zabití skriptu a vypnutí nosave.
(3) Pokud skript provádí pouze čtení operací, použijte příkaz ke zabití skriptu k okamžitému zastavení skriptu; Pokud skript provede zápisovou operaci, je povolen pouze příkaz pro vypnutí uložení/nosave, který může server zastavit a zabránit zápisu aktuálních dat na disk. (V tuto chvíli je server mimo provoz a data se neukládají)
příklad
Spusť skript, parametry jsou 2 klíč a hodnota a příkaz je následující:
Deadloop skripty, při spuštění následujícího skriptu Redis nebude schopen zpracovávat jiné příkazy a zasekne se:
Zkuste použít skript k přidání dat typu string pomocí následujícího příkazu:
Spuskutěte složitější skripty, pokud je hodnota klíče rovna hodnotě, kterou jsme předali, pak cache smažte, jinak udělejte cokoliv, příkaz je následující:
Výsledky implementace jsou následující:
(Konec)
|