Mengenai redis, semua orang sering menggunakannya, dan skenario yang paling banyak digunakan adalah data caching.
resensi
Dimulai dengan redis 2.6.0, redis memiliki penerjemah Lua bawaan dan menyediakan perintah eval untuk mengurai evaluasi skrip Lua.
Sintaks: eval script numkeys keys args
Parameter:
eval — Redis menyediakan perintah untuk mengurai skrip lua
skrip — skrip lua
numkeys — Menentukan jumlah kunci dalam kumpulan parameter nama kunci
keys — Kumpulan parameter keyname, diwakili oleh array KEYS variabel global, dimulai dengan subskrip 1
args — Sekumpulan parameter nilai kunci, diwakili oleh array variabel global ARGV, dimulai dengan subskrip 1
Keuntungan menggunakan Lua di Redis
Kurangi overhead jaringan. Beberapa permintaan dapat dikirim sekaligus dalam bentuk skrip untuk mengurangi latensi jaringan Manipulasi atom. Redis akan mengeksekusi seluruh skrip secara keseluruhan, tanpa perintah lain yang disisipkan di antaranya. Oleh karena itu, tidak perlu khawatir dengan kondisi balapan dan transaksi selama proses scripting. Dipulihkan. Langkah kaki yang dikirim oleh klien disimpan secara terus-menerus dalam redis sehingga klien lain dapat menggunakan kembali skrip tanpa harus menggunakan kode untuk menyelesaikan logika yang sama.
Atomisitas skrip
Skrip Lua tidak dapat memiliki operasi yang memakan waktu atau loop mati, jika tidak, redis tidak akan menerima perintah lain dan mengeksekusi untuk menghentikan skrip berjalan
Redis menggunakan penerjemah Lua tunggal untuk menjalankan semua skrip, dan memastikan bahwa skrip dieksekusi secara atomik.Ini berarti bahwa saat skrip berjalan, tidak ada skrip atau perintah redis lain yang akan dieksekusi! Oleh karena itu, jika skrip saat ini berjalan lambat, server mungkin tidak dapat menjalankan perintah karena sibuk, seperti:
Setiap skrip memiliki batas waktu eksekusi maksimum, nilai defaultnya adalah 5 detik. Waktu eksekusi maksimum dikendalikan oleh opsi lua-time-limit dari file konfigurasi redis.conf, atau langsung dengan menggunakan perintah config get dan config set. Ketika eksekusi skrip mencapai waktu eksekusi maksimumnya, Redis tidak menghentikannya secara aktif, ia melakukan langkah-langkah berikut:
(1) Redis mencatat bahwa skrip kehabisan waktu
(2) Redis mulai menerima kembali permintaan dari klien lain, tetapi hanya menerima eksekusi perintah kill skrip dan mematikan nosave.
(3) Jika skrip hanya melakukan operasi baca, gunakan perintah skrip kill untuk segera menghentikan skrip; Jika skrip melakukan operasi tulis, hanya perintah shutdown save/nosave yang diizinkan untuk menghentikan server untuk mencegah data saat ini ditulis ke disk. (Pada titik ini, server sedang down dan data tidak akan disimpan)
contoh
Jalankan skrip, parameternya adalah 2 kunci dan nilai, dan perintahnya adalah sebagai berikut:
Skrip deadloop, mengeksekusi skrip berikut akan menyebabkan redis tidak dapat memproses perintah lain dan macet:
Coba gunakan skrip untuk menambahkan data jenis string dengan perintah berikut:
Jalankan beberapa skrip yang lebih kompleks, jika nilai kunci sama dengan nilai yang kita teruskan, maka hapus cache, jika tidak, lakukan apa saja, perintahnya adalah sebagai berikut:
Adapun hasil pelaksanaannya adalah sebagai berikut:
(Akhir)
|