今天就跟大家聊聊有关怎么在Redis中利用Eval实现键值自增,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
在PHP上使用Redis 给多个键值进行自增,示例如下:
$set['money'] = $this->redis->hIncrByFloat($key, $hour .'_money', $data['money']); $set['ip'] = $this->redis->hIncrBy($key, $hour .'_ip', $data['ip']); $set['uv'] = $this->redis->hIncrBy($key, $hour .'_uv', $data['uv']); $set['pv'] = $this->redis->hIncrBy($key, $hour .'_pv', $data['pv']); $this->redis->hSet($key, $hour, array($data['money'], $data['ip'], $data['uv'], $data['pv']));
如果这样写可能需要请求五次,可以通过 Eval 方法来一次完成,大大提高效率
$script = 'local money = redis.call("hIncrByFloat", KEYS[1], ARGV[1], ARGV[2]);'; $script .= 'local ip = redis.call("hIncrBy", KEYS[1], ARGV[3], ARGV[4]);'; $script .= 'local uv = redis.call("hIncrBy", KEYS[1], ARGV[5], ARGV[6]);'; $script .= 'local pv = redis.call("hIncrBy", KEYS[1], ARGV[7], ARGV[8]);'; $script .= 'local val = money ..",".. ip ..",".. uv ..",".. pv;'; $script .= 'redis.call("hSet", KEYS[1], ARGV[2], val);'; $script .= 'return val;'; $result = $this->redis->evaluate($script, [$key, $hour, $hour .'_money', $data['money'], $hour .'_ip', $data['ip'], $hour .'_uv', $data['uv'], $hour .'_pv', $data['pv']], 2); var_dump($result);
Redis 用的 Lua 语法,我也不熟悉,这个字符串拼接方式也很特别的是两个点号 “..”
money ..",".. ip ..",".. uv ..",".. pv 拼接后 0.01,1,2,3
看完上述内容,你们对怎么在Redis中利用Eval实现键值自增有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。