Redis使用Eval多个键值自增的操作实例


Posted in PHP onNovember 04, 2016

在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多个键值自增的操作实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php mssql 时间格式问题
Jan 13 PHP
PHP可变函数的使用详解
Jun 14 PHP
PHP中array_merge和array相加的区别分析
Jun 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
php对文件进行hash运算的方法
Apr 03 PHP
Smarty模板变量调节器用法分析
May 23 PHP
php实现的http请求封装示例
Nov 08 PHP
PHP的mysqli_stat()函数讲解
Jan 23 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
PHP架构及原理知识点详解
Dec 22 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 #PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 #PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 #PHP
PHP读取文件的常见几种方法
Nov 03 #PHP
PHP自定义多进制的方法
Nov 03 #PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 #PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 #PHP
You might like
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
PHP Include文件实例讲解
2019/02/15 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python打印斐波拉契数列实例
2015/07/07 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
python定向爬取淘宝商品价格
2018/02/27 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
关于python多重赋值的小问题
2019/04/17 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
python switch 实现多分支选择功能
2020/12/21 Python
银行存款证明样本
2014/01/17 职场文书
美术教师岗位职责
2014/03/18 职场文书
婚前协议书标准版
2014/10/19 职场文书
关于学习的决心书
2015/02/05 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技