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 相关文章推荐
ftp类(example.php)
Oct 09 PHP
上传多个文件的PHP脚本
Nov 26 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
PHP判断是否有Get参数的方法
May 05 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
Feb 20 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 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
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
php动态生成函数示例
2014/03/21 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
Prototype Number对象 学习
2009/07/19 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
js中传递特殊字符(+,&)的方法
2014/01/16 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
jQuery复合事件用法示例
2017/06/10 jQuery
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
Python数据结构之Array用法实例
2014/10/09 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
详解python statistics模块及函数用法
2019/10/27 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
检讨书范文500字
2015/01/28 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书