redis 学习-11 lua脚本及php中的lua脚本
简介
用于高效地处理 CAS (check-and-set)命令,整个脚本会以原子性的方式执行
关于lua语言相关的就不说了,这里记录下再php中怎么使用lua,注意这里使用的是predis
/**
* 定义命令类,需继承 ScriptCommand 类
* Class MyMultipleSetNx
*/
class MyMultipleSetNx extends Predis\Command\ScriptCommand
{
/**
* key的数量
* @return int
*/
public function getKeysCount()
{
// 参数个数,等于-1则代表最后一个参数,其他的全部是key
return 3;
}
/**
* 脚本代码
* @return string
*/
public function getScript()
{
return <<<LUA
local result = {}
for key,value in pairs(KEYS) do
if redis.call('exists', value) == 1 then
result[key] = 0
else
result[key] = 1
redis.call('set', value, ARGV[key])
end
end
return result
LUA;
}
}
$redisClient = new \Predis\Client('tcp://127.0.0.1:6379');
// 定义命令
$redisClient->getProfile()->defineCommand('myMsetNx', 'MyMultipleSetNx');
// 调用
$result = call_user_func_array([$redisClient, 'myMsetNx'], ['myMultipleNxKey1', 'myMultipleNxKey2', 'myMultipleNxKey3', 'myMultipleNxValue1', 'myMultipleNxValue2', 'myMultipleNxValue3']);
var_dump($result);
输出
[root@jin redis-test]# php-5.6.13 tes-redis.php
/www_new/redis-test/tes-redis.php:42:
array(3) {
[0] =>
int(0)
[1] =>
int(0)
[2] =>
int(0)
}