Redis ialah pangkalan data storan nilai kunci sumber terbuka dan skrip Lua ialah alat pengaturcaraan yang sangat berkuasa dalam Redis. Lua ialah bahasa skrip yang ringan dan cekap yang boleh digunakan sebagai bahasa sambungan untuk pelayan Redis. Artikel ini akan memperkenalkan penulisan, kaedah panggilan dan aplikasi praktikal skrip Lua dalam Redis.
1. Skrip Lua dalam Redis
1.1 Pengenalan kepada bahasa skrip Lua
Sebagai bahasa yang ringan, skrip Lua mempunyai set sintaks khusus dan jenis dinamik yang sangat kecil. prestasi yang baik dan ciri lain, tetapi ciri ini menjadikan skrip Lua lebih sesuai untuk menyelesaikan beberapa masalah tertentu.
1.2 Kebaikan dan keburukan bahasa skrip Lua dalam Redis
Kebaikan:
Kelemahan:
1.3 Peraturan skrip Lua dalam Redis
1.4 Contoh kod skrip Lua dalam Redis
Berikut ialah contoh skrip Lua bagi pembilang:
kiraan tempatan = tonumber(redis.call("get ", KEYS[1])) atau 0
jika dikira > tonumber(ARGV[1]) maka
redis.call("set", KEYS[1], ARGV[1]) return 0
lain
count = redis.call("incr", KEYS[1]) return count
tamat
2. Redis Kaedah memanggil skrip Lua
Terdapat dua cara untuk memanggil skrip Lua dalam Redis:
2.1 Menggunakan arahan EVAL
Redis menyediakan arahan EVAL, yang boleh digunakan untuk jalankan dan tulis skrip Lua yang Baik.
Sintaks:
kunci numkey skrip EVAL [kunci ...] arg [arg ...]
Contoh:
redis.eval('return redis. call("GET", KEYS[1])', 1, "mykey")
2.2 Gunakan arahan SCRIPT LOAD
Dalam Redis, anda juga boleh menggunakan arahan SCRIPT LOAD untuk memuatkan Lua dalam skrip awal dan kemudian panggil cincang SHA1 untuk melaksanakan skrip.
Sintaks:
skrip LOAD SKRIP
Contoh:
skrip tempatan = [[
local key = KEYS[1] local max_count = tonumber(ARGV[1]) local current_count = tonumber(redis.call("get", key)) if current_count and current_count >= max_count then redis.call("del", key) end redis.call("incr", key) return true
]]
kunci tempatan = 'limiter:xxx'
bilangan_maksimum tempatan = 10
skrip tempatan_sha = redis.call('SCRIPT', 'LOAD', script)
redis.call('EVALSHA', script_sha, 1, key, max_count)
3. Contoh aplikasi skrip Lua dalam Redis
3.1 Kunci teragih
Kunci teragih memerlukan kod skrip yang sama pada semua nod Redis ini kecekapan operasi aplikasi.
Contoh skrip Lua yang melaksanakan kunci teragih:
kunci_kunci tempatan = KEYS[1]
masa tamat_kunci tempatan = tonumber(ARGV[1])
nilai_kunci tempatan = KEYS[2 ]
masa_sah_kunci tempatan = tonumber(ARGV[2])
jika redis.call("set", kunci_kunci, nilai_kunci, "NX", "EX", lock_timeout) maka
redis.call("expire", lock_key, lock_valid_time) return lock_value
else
return nil
tamat
3.2 Pertanyaan paging koleksi yang dipesan
Koleksi yang dipesan Redis menyediakan fungsi pertanyaan paging, yang boleh berdasarkan julat skor dalam koleksi yang dipesan. Lakukan pertanyaan paging.
Contoh skrip Lua yang melaksanakan pertanyaan paging set tersusun:
local page_no = tonumber(ARGV[1])
local page_size = tonumber(ARGV[2])
local mula = (halaman_no - 1) * page_size
local stop = page_no * page_size - 1
local opts = {score_cast_func = tonumber}
local result = {}
local data = redis.call("ZRANGE", KEYS[1], mula, berhenti, "WITHSCORES")
untuk idx = 1, #data, 2 do
local k = data[idx] local v = tonumber(data[idx + 1]) table.insert(result, {k, v})
tamat
kembali hasil
Kesimpulan:
Skrip Lua ialah alat yang sangat berkuasa dalam Redis, jadi kaedah menulis dan memanggil skrip Lua adalah sangat penting. Dalam aplikasi praktikal, kita boleh menulis skrip Lua yang sepadan untuk senario aplikasi tertentu untuk meningkatkan prestasi dan kelajuan berjalan Redis.
Atas ialah kandungan terperinci Penulisan skrip Lua dan aplikasi untuk Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!