Dengan pembangunan aplikasi web secara beransur-ansur, teknologi yang digunakan dalam antara muka web menjadi semakin pelbagai. Sudah tentu, PHP terus memainkan peranan penting sebagai bahasa skrip sebelah pelayan klasik. Dalam aplikasi PHP, kadangkala anda perlu melakukan operasi perniagaan yang kompleks, yang mungkin termasuk berbilang operasi baca dan tulis pangkalan data. Untuk meningkatkan prestasi dan kecekapan, teknologi seperti caching perlu digunakan untuk pengoptimuman.
Pada masa ini dalam aplikasi PHP, penyelesaian pengoptimuman baca dan tulis yang paling biasa ialah menggunakan Memcache. Menggunakan Memcache dalam aplikasi PHP dengan berkesan boleh mengelakkan pembacaan dan penulisan pangkalan data yang kerap, tetapi ia akan menyebabkan masalah konsistensi cache. Jika ia perlu digunakan dalam persekitaran pengimbangan beban berbilang proses, strategi caching yang lebih kompleks perlu direka bentuk dan Memcache bukanlah komponen yang ringan dan perlu menduduki lebih banyak memori.
Artikel ini memperkenalkan alternatif yang ringan: menggunakan skrip Lua dalam aplikasi PHP dan menggunakan Redis untuk menyelesaikan masalah konsistensi baca dan tulis.
Lua ialah bahasa skrip ringan yang boleh digunakan sebagai bahasa sambungan terbenam untuk program sedia ada. Lua telah dibangunkan oleh kumpulan penyelidik di Universiti Katolik Rio de Janeiro di Brazil, dan versi pertama dikeluarkan pada tahun 1993. Lua sangat dipuji kerana saiznya yang kecil, cepat dan kebolehbenamannya. Ia adalah bahasa skrip yang sangat baik.
Lua mempunyai ciri bahasa dinamik yang berkuasa, mudah untuk membaca dan menulis kod, dan menyokong pengaturcaraan prosedur, pengaturcaraan berorientasikan objek, pengaturcaraan berfungsi dan pengaturcaraan dipacu data. Lua ialah bahasa yang boleh disesuaikan yang digunakan secara meluas dalam sesetengah enjin permainan, seperti CryEngine, World of Warcraft, dsb.
Redis ialah pangkalan data NoSQL yang pantas dan ringan, biasanya digunakan dalam cache, baris gilir mesej dan senario lain. Redis ialah pangkalan data dalam memori dan menggunakan mekanisme kegigihan cakera untuk memenuhi keperluan senario konkurensi tinggi dan daya pemprosesan tinggi.
Lua boleh berinteraksi dengan Redis melalui mod strategi Redis untuk menyelesaikan masalah konsistensi data. Skrip Lua boleh menyerahkan kedua-dua operasi baca dan tulis kepada Redis, dengan itu mengelakkan isu konsistensi cache yang disebabkan oleh aplikasi terus membaca dan menulis ke pangkalan data.
PHP memasang sambungan LuaJIT melalui Komposer untuk berinteraksi dengan Lua.
LuaJIT ialah pelaksanaan sumber terbuka Lua Lapisan bawah ditulis dalam C, yang boleh memberikan kecekapan pelaksanaan yang lebih tinggi. Menggunakan sambungan LuaJIT dalam PHP memerlukan LuaJIT dipasang terlebih dahulu. Mengambil CentOS sebagai contoh, arahan pemasangan adalah seperti berikut:
yum install -y luajit-devel
Selepas pemasangan selesai, anda boleh menyemak sama ada LuaJIT berjaya dipasang melalui kaedah berikut:
$ php -r "var_dump(extension_loaded('luajit'));" bool(true)
dalam Untuk menggunakan skrip Lua dalam aplikasi PHP, anda perlu menulis beberapa atur cara Lua. Berikut ialah contoh skrip Lua yang menyimpan dan memperoleh data melalui Redis, khususnya melaksanakan operasi baca dan tulis.
local read_val = redis.call("get", KEYS[1]) if read_val ~= false then redis.call("set", KEYS[1], read_val) return read_val end redis.call("set", KEYS[1], ARGV[1]) return ARGV[1]
Dalam skrip Lua ini, kami menggunakan Redis untuk menyimpan data dan melaksanakan operasi baca dan tulis. Pertama, skrip membaca nilai dengan kunci KEYS[1] melalui perintah get Redis Jika data baca tidak kosong, nilai baca akan dikembalikan secara langsung, jika tidak, kuncinya ialah KEYS[1] ditulis kepada Redis. , nilainya ialah ARGV[1] dan ARGV[1] dikembalikan.
Menggunakan skrip Lua dalam PHP memerlukan pemasangan sambungan phpredis. Arahan pemasangan adalah seperti berikut:
composer require "phpredis/phpredis"
Untuk memanggil skrip Lua dalam PHP, anda boleh menggunakan kaedah pEval() yang disediakan oleh sambungan phpredis. Parameter pertama kaedah ini ialah rentetan skrip Lua, dan parameter kedua ialah tatasusunan satu dimensi yang mengandungi nama kunci Redis dan nilai yang perlu ditulis kepada Redis.
$options = [ 'host' => '127.0.0.1', 'port' => 6379 ]; $redis = new \Redis(); $redis->connect($options['host'], $options['port']); // 导入 Lua 脚本到 Redis 中 $script = <<<EOF local read_val = redis.call("get", KEYS[1]) if read_val ~= false then redis.call("set", KEYS[1], read_val) return read_val end redis.call("set", KEYS[1], ARGV[1]) return ARGV[1] EOF; // 使用 Redis 执行 Lua 脚本 $key = "mykey"; $value = "myvalue"; $result = $redis->pEval($script, [ $key ], [ $value ]); print_r($result); // output: myvalue
Dalam PHP, kita perlu menggunakan Redis untuk melaksanakan program Lua bagi melengkapkan operasi baca dan tulis. Dalam contoh di atas, kami mengimport program Lua ke dalam Redis dan melaksanakan program Lua melalui kaedah pEval() Redis.
Dengan menggunakan skrip Lua dalam aplikasi PHP, digabungkan dengan Redis, masalah ketekalan baca dan tulis boleh diselesaikan, dan tekanan baca dan tulis MySQL juga boleh dikurangkan. Kerjasama antara Lua dan Redis boleh dengan mudah melaksanakan logik perniagaan yang sangat kompleks.
Walau bagaimanapun, perlu diingat bahawa walaupun menggunakan skrip Lua boleh mengurangkan masalah konsistensi membaca dan menulis dalam aplikasi, ia juga akan mengurangkan kebolehselenggaraan sistem. Dalam penggunaan sebenar, adalah disyorkan untuk memilih penyelesaian teknikal secara rasional untuk mengelakkan sistem menjadi terlalu rumit.
Atas ialah kandungan terperinci Bagaimanakah PHP menggunakan Lua untuk mencapai isu ketekalan baca dan tulis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!