Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 29611|Jawab: 2

[Redis] Redis menggunakan skrip Lua untuk penjelasan terperinci

[Salin tautan]
Diposting pada 30/04/2021 15.42.57 | | | |
Mengenai redis, semua orang sering menggunakannya, dan skenario yang paling banyak digunakan adalah data caching.

resensi

Perbedaan Persistensi Redis Antara RDB dan AOF
https://www.itsvse.com/thread-9555-1-1.html

Instalasi Docker menjalankan cache Redis
https://www.itsvse.com/thread-8995-1-1.html

Contoh menjelaskan apa itu penetrasi cache Redis, longsoran cache, dan perincian cache
https://www.itsvse.com/thread-8968-1-1.html

Wildcard Redis untuk menghapus kunci secara massal
https://www.itsvse.com/thread-7957-1-1.html

Instalasi CentOS 7 Redis 5.0.3 tutorial
https://www.itsvse.com/thread-7201-1-1.html

Instal ekstensi redis di bawah php 5.5.7 di bawah CentOS
https://www.itsvse.com/thread-7200-1-1.html

Berapa banyak kunci yang dapat disimpan dalam instans redis, dan apa kunci dan nilai maksimumnya?
https://www.itsvse.com/thread-6848-1-1.html

Masalah bahasa Cina redis tidak dapat ditampilkan dengan baik
https://www.itsvse.com/thread-5032-1-1.html

Redis memungkinkan akses jarak jauh
https://www.itsvse.com/thread-5011-1-1.html

Windows gagal memulai layanan Redis, kesalahan 1067: Proses berakhir secara tak terduga.
https://www.itsvse.com/thread-5010-1-1.html

CentOS menginstal Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

Redis menyiapkan koneksi jarak jauh dan kata sandi akses
https://www.itsvse.com/thread-4101-1-1.html

Redis mengosongkan cache data
https://www.itsvse.com/thread-4027-1-1.html

Konfigurasi persistensi Redis dan persistensi nonaktif
https://www.itsvse.com/thread-4012-1-1.html

Perbedaan antara save dan bgsave di redis
https://www.itsvse.com/thread-4010-1-1.html

Redis dua metode dan prinsip persistensi
https://www.itsvse.com/thread-4009-1-1.html

Redis memiliki tiga cara untuk memulai
https://www.itsvse.com/thread-4008-1-1.html

Metode Redis untuk menyembunyikan jendela baris perintah
https://www.itsvse.com/thread-2988-1-1.html

Masalah Nilai Hash Hash Redis
https://www.itsvse.com/thread-2587-1-1.html

5 Hal yang Harus Anda Ketahui Sebelum Menggunakan Redis
https://www.itsvse.com/thread-2580-1-1.html

Redis memodifikasi nomor port default dan mengatur kata sandi akses
https://www.itsvse.com/thread-2577-1-1.html

Unduhan Redis windows 64-bit, alamat unduhan resmi
https://www.itsvse.com/thread-2576-1-1.html
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)




Mantan:Monitor Prinsip Kunci .NET/C# memberikan penjelasan mendalam
Depan:IIS HAPUS PUT request 405 solusi
 Tuan tanah| Diposting pada 10/05/2021 09.18.34 |

Login hyperlink terlihat.
Perintah Redis Script Load digunakan untuk menambahkan skrip skrip ke cache skrip, tetapi tidak segera dieksekusi.

Perintah EVAL juga menambahkan skrip ke cache skrip, tetapi segera mengevaluasi skrip input.

Jika skrip yang diberikan sudah ada di cache, maka tidak ada tindakan yang diambil.

Setelah skrip ditambahkan ke cache, skrip dapat dipanggil menggunakan checksum SHA1 skrip melalui perintah EVALSHA. (Ini juga berarti.)Skrip yang sama mengeksekusi nilai sha1 yang sama di server redis yang berbeda

Skrip dapat tetap berada di cache untuk waktu yang tidak terbatas hingga SCRIPT FLUSH dieksekusi.



 Tuan tanah| Diposting pada 12/05/2021 11.38.55 |
Menentukan apakah skrip lua ada di cache


Setelah Redis dimulai ulang, skrip Lua secara otomatis dihapus, tidak akan permanen

Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com