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+DBM的同学录程序(1)
Oct 09 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
php抽奖小程序的实现代码
Jun 18 PHP
php多个字符串替换成同一个的解决方法
Jun 18 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
laravel安装和配置教程
Oct 29 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
php中数组最简单的使用方法
Dec 27 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引用地址改变变量值的问题
2012/03/23 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
Python将string转换到float的实例方法
2019/07/29 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
python是否适合网页编程详解
2019/10/04 Python
python wsgiref源码解析
2021/02/06 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
美国眼镜网:GlassesUSA
2017/09/07 全球购物
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
数据库面试要点基本概念
2013/10/31 面试题
销售员个人求职的自我评价
2014/02/10 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
求职简历自我评价范例
2014/03/12 职场文书
股权收购意向书
2014/04/01 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
2015年元宵节活动总结
2015/02/06 职场文书