Rumah > pangkalan data > Redis > Penulisan skrip Lua dan aplikasi untuk Redis

Penulisan skrip Lua dan aplikasi untuk Redis

WBOY
Lepaskan: 2023-05-11 17:17:09
asal
2130 orang telah melayarinya

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:

  • Atomicity: Skrip Lua adalah atom dan tidak akan diganggu oleh pelanggan lain , dilaksanakan secara berasingan.
  • Kebolehgunaan semula: Kod skrip Lua boleh digunakan semula pada berbilang nod REDIS.
  • Prestasi cemerlang: Penterjemah skrip Lua dan Pelayan Redis mencapai prestasi yang sangat cekap dengan berkongsi proses.

Kelemahan:

  • Sukar untuk nyahpepijat: Ciri bahasa skrip Lua adalah berbeza daripada ciri bahasa Redis, dan sukar untuk menjalankan penyiasatan lengkap skrip Lua ;
  • Pautan antara skrip Redis dan Lua: Skrip Lua perlu menghantar parameter dan mengembalikan data melalui klien, menambah overhed tambahan.

1.3 Peraturan skrip Lua dalam Redis

  • Persekitaran Lua yang digunakan oleh Redis ialah 5.1 dan serasi dengan beberapa sintaks lanjutan versi 5.2
  • Semua Arahan Redis mesti dipanggil melalui Redis.call;
  • Semua rujukan nilai Redis.key perlu dihantar menggunakan KEYS atau ARGV
  • Semua pengendalian ralat perlu menggunakan fungsi ralat.

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
Salin selepas log masuk

lain

count = redis.call("incr", KEYS[1])
return count 
Salin selepas log masuk

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
Salin selepas log masuk

]]

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
Salin selepas log masuk

else

return nil
Salin selepas log masuk

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})
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan