PHP Redis 执行 Lua 脚本追加数据到列表失败问题解决
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);
?>
在这个版本的脚本中,我们首先检查传入的键名对应的列表是否存在,如果不存在,就创建一个新的列表并将传入的数组元素添加到列表中。这个调整应该解决你的问题。
原文地址: https://www.cveoy.top/t/topic/mBck 著作权归作者所有。请勿转载和采集!