Redis'e gelince, herkes genellikle kullanıyor ve en çok kullanılan senaryo veri önbellekleme.
eleştiri
Redis 2.6.0 ile itibaren, redis'in yerleşik bir Lua yorumlayıcısı vardır ve Lua script değerlendirmesini ayrıştırmak için bir eval komutu sağlar.
Sözdizimi: eval script numkeys keys args
Parametreler:
eval — Redis, lua bebesini ayrıştırmak için komutlar sağlar
Script — Lua Script
numkeys — Anahtar adı parametre kümesindeki anahtar sayısını belirtir
anahtarlar — Anahtar adı parametre kümesi, 1 alt indeksi ile başlayan küresel değişken KEYS dizisi ile temsil edilir
args — 1 alt indeksiyle başlayan bir global değişken dizisi ARGV ile temsil edilen bir anahtar-değer parametreleri kümesi
Redis'te Lua kullanmanın avantajları
Ağ ek yükünü azaltın. Ağ gecikmesini azaltmak için aynı anda birden fazla istek script şeklinde gönderilebilir Atomik manipülasyon. Redis tüm betiği çalıştırır ve arada başka komut eklenmez. Bu nedenle, script sürecinde yarış koşulları ve işlemler konusunda endişelenmenize gerek yoktur. Yeniden göreve getirildi. İstemci tarafından gönderilen ayak izleri, diğer istemcilerin aynı mantığı tamamlamak için kod kullanmadan betiği tekrar kullanabilmeleri için sürekli olarak redis olarak saklanır.
Yazı atomikliği
Lua betikleri zaman alıcı işlemlere veya ölü döngülere sahip olamaz, aksi takdirde Redis diğer komutları kabul etmez ve betikin çalışmasını durdurmak için çalıştırır
Redis, tüm betikleri çalıştırmak için tek bir Lua yorumlayıcısı kullanır ve betiklerin atomik olarak çalıştırılmasını sağlar.Bu, bir script çalışırken başka hiçbir script veya redis komutu çalıştırılmayacağı anlamına gelir! Bu nedenle, mevcut betik yavaş çalışıyorsa, sunucu komutu çalıştıramayabilir çünkü komut meşgul olduğu için, örneğin:
Her scriptin maksimum bir çalışma süresi sınırı vardır, varsayılan değer 5s'tir. Maksimum çalışma süresi, yapılandırma dosyası redis.conf'un lua-zaman sınırı seçeneğiyle veya doğrudan config get ve config set komutlarıyla kontrol edilir. Bir script çalıştırma süresi maksimum çalıştırma süresine ulaştığında, Redis onu aktif olarak sonlandırmaz, aşağıdaki adımları gerçekleştirir:
(1) Redis, bir senaryonun zamanının tükendiğini kaydeder
(2) Redis diğer istemcilerden gelen talepleri yeniden kabul etmeye başlar, ancak sadece script kill komutlarının çalıştırılmasını ve nosave'i kapatmasını kabul eder.
(3) Script sadece okuma işlemlerini gerçekleştiriyorsa, script kill komutunu kullanarak script'i hemen durdurur; Script bir yazma işlemi gerçekleştirirse, sunucuyu durdurmak için sadece kapatma kaydetme/nosave komutu mevcut verilerin diske yazılmasını engellemeye izin verilir. (Bu noktada sunucu kapalıdır ve veri kaydedilmez)
örnek
Komutu çalıştırın, parametreler 2 anahtar ve değerdir ve komut şu şekildedir:
Deadloop scriptlerde, aşağıdaki betikleri çalıştırmak Redis'in diğer komutları işlememesine ve takılmasına neden olur:
Aşağıdaki komutla bir script kullanarak veri tipi dizesini eklemeyi deneyin:
Daha karmaşık betikler çalıştırın, anahtarın değeri verdiğimiz değere eşitse, önbelleği silin, aksi takdirde istediğiniz bir şey yapın, komut şöyledir:
Uygulamanın sonuçları aşağıdaki gibidir:
(Son)
|