PHP Redis 执行 Lua 脚本向列表追加数据失败问题解决

本文将介绍使用 PHP Redis 执行 Lua 脚本向 Redis 列表追加数据时遇到的问题,并提供相应的解决方案。

问题描述:

我用 PHP Redis 执行这段 Lua 脚本不能向 Redis 列表里追加数据,是怎么回事,求解决

代码示例:

<?php
$_redis=new Redis();
$_redis->connect("localhost",6379);
$_redis->auth("0000");
$_redis->select(0);

$_LUA= <<< LUA
local temp = redis.pcall('get',KEYS[1]);
if (temp == nil) then
    local shuzu = cjson.decode(ARGV[2]);
    for q=1,tonumber(ARGV[1]),1 do
        redis.pcall('lpush',KEYS[1],shuzu[q])
    end
end

LUA;
$jsonarr=json_encode([10001,10002,10003,10004,10005,10006],true);
$_eval_arr=['jh_2',6,$jsonarr];
$_redis->eval($_LUA,$_eval_arr,1);
?>

问题原因:

根据你的 Lua 脚本,如果传入的键名对应的列表不存在,它会将传入的数组作为新元素添加到列表中。所以,你需要确保传入的键名对应的列表存在。

解决方案:

你可以尝试使用以下代码:

<?php
$_redis = new Redis();
$_redis->connect("localhost", 6379);
$_redis->auth("0000");
$_redis->select(0);

$_LUA = <<< LUA
local temp = redis.pcall('get',KEYS[1]);
local shuzu = cjson.decode(ARGV[2]);
if (temp == nil) then
    for q = 1, tonumber(ARGV[1]), 1 do
        redis.pcall('lpush', KEYS[1], shuzu[q])
    end
end
LUA;

$jsonarr = json_encode([10001, 10002, 10003, 10004, 10005, 10006], true);
$_eval_arr = ['jh_2', 6, $jsonarr];
$_redis->eval($_LUA, $_eval_arr, 1);
?>

在这个版本的脚本中,我们首先检查传入的键名对应的列表是否存在,如果不存在,就创建一个新的列表并将传入的数组元素添加到列表中。这个调整应该解决你的问题。

PHP Redis 执行 Lua 脚本追加数据到列表失败问题解决

原文地址: https://www.cveoy.top/t/topic/mBck 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录