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聊天室技术
Oct 09 PHP
php正则校验用户名介绍
Jul 19 PHP
php去除数组中重复数据
Nov 18 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
php+mysqli使用面向对象方式查询数据库实例
Jan 29 PHP
php安装swoole扩展的方法
Mar 19 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
laravel中的错误与日志用法详解
Jul 26 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
[原创]php实现 data url的图片生成与保存
Dec 04 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 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
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python中的高级数据结构详解
2015/03/27 Python
Python解惑之True和False详解
2017/04/24 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
浙大毕业生自荐信
2014/01/26 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
动员大会主持词
2014/03/20 职场文书
绿色环保演讲稿
2014/05/10 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
初中作文评语集锦
2014/12/25 职场文书
公司租车协议书
2015/01/29 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
Python 数据可视化之Seaborn详解
2021/11/02 Python
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android