phpredis 执行LUA脚本的例子

$lua = <<<EOT
    local kws = {}
    local lrkws = {}
        local nkws = {}
        local kw_ids = {}
        local lr_ids = {}
        local n_ids = {}

        for kw in string.gmatch(KEYS[1], "[^|]+") do
            table.insert(kws, "kw:"..kw)
        end
        for kw in string.gmatch(KEYS[2], "[^|]+") do
            table.insert(lrkws, "lrkw:"..kw)
        end
        for kw in string.gmatch(KEYS[3], "[^|]+") do
            table.insert(nkws, "nkw:"..kw)
        end

        if #kws > 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值