phpredis 执行LUA脚本的例子

$lua = << 0 then
            kw_ids = redis.call('sinter', unpack(kws))
        end
        if #lrkws > 0 then
            lr_ids = redis.call('sinter', unpack(lrkws))
        end
        if #nkws > 0 then
            n_ids = redis.call('sinter', unpack(nkws))
        end
        local cache_key = ARGV[1]

        for _, v in ipairs(kw_ids) do
            redis.call('sadd', cache_key, v)
        end
        for _, v in ipairs(lr_ids) do
            redis.call('sadd', cache_key, v)
        end
        for _, v in ipairs(n_ids) do
            redis.call('sadd', cache_key, v)
        end
        redis.call('expire', cache_key, 600)
        return redis.call('scard', cache_key)
EOT;

    $ret = $redis->eval($lua, array("你好|谢谢", "", "hello", "cache_key"), 3);
    echo $ret;

例子中传入3个KEYS参数,1个ARGV参数。 KEYS参数是字符串,单词之间用 | 分割。
lua脚本最后将查询结果存入 ARGV参数指定的key中,并返回结果set的成员个数。

需要注意的是, eval函数的第3个参数为KEYS个数。 phpredis依据此值将KEYS和ARGV做区分。

参考网页: https://github.com/phpredis/phpredis/blob/develop/tests/RedisTest.php

你可能感兴趣的:(phpredis 执行LUA脚本的例子)