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
source.php查看源文件
Dec 09 PHP
php session 预定义数组
Mar 16 PHP
php中对2个数组相加的函数
Jun 24 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
php ci框架验证码实例分析
Jun 26 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 09 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
2011/07/03 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
python提示No module named images的解决方法
2014/09/29 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
django的ORM模型的实现原理
2019/03/04 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
.NET概念性的面试题
2012/02/29 面试题
贷款委托书范本
2014/04/08 职场文书
春季防火方案
2014/05/10 职场文书
拓展训练激励口号
2014/06/17 职场文书
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby