使用Redis执行LUA脚本

<?php
declare(strict_types=1);
ini_set('display_errors', 'On');
ini_set('error_reporting', E_ALL);

// Lua脚本
$script = <<<LUA
            local name_key  = KEYS[1] -- 获取键名name
            local sex_key   = KEYS[2] -- 获取键名sex
            local birth_key = KEYS[3] -- 获取键名birth
            
            local name_value  = redis.call("GET", name_key)  -- 获取name的键值
            local sex_value   = redis.call("GET", sex_key)   -- 获取sex的键值
            local birth_value = redis.call("GET", birth_key) -- 获取birth的键值
            
            local argv1_value = ARGV[1] -- 获取参数1的值
            local argv2_value = ARGV[2] -- 获取参数2的值
            local argv3_value = ARGV[3] -- 获取参数3的值
            
            -- 返回数据
            return {
                name_value,  sex_value,   birth_value,
                argv1_value, argv2_value, argv3_value,
            }
        LUA;

$keys = ['name', 'sex', 'birth']; // LUA脚本对应的KEYS数组
$argv = ['李四', '', '2004']; // LUA脚本对应的ARGV数组

$redis = new Redis();
$redis->connect('localhost');
$redis->auth('************');

$eval = $redis->eval($script, array_merge($keys, $argv), count($keys));
// 方法定义:public function eval(string $script, array $args = [], int $numKeys = 0)
// 参数说明:{$args}数组里的前{$numKeys}个元素是KEY,后面的元素则是ARGV,在Lua脚本中可通过KEYS[i]ARGV[i]的方式访问。

print_r($eval);
// Array
// (
//     [0] => 张三
//     [1] => //     [2] => 2003
//     [3] => 李四
//     [4] => //     [5] => 2004
// )

Copyright © 2026 码农人生. All Rights Reserved