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中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
Jun 02 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
PHP7内核之Reference详解
Mar 14 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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 项目的方法
2007/01/02 PHP
用PHP生成html分页列表的代码
2007/03/18 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php计算年龄精准到年月日
2015/11/17 PHP
javascript函数中的arguments参数
2010/08/01 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
python+opencv实现阈值分割
2018/12/26 Python
对Python w和w+权限的区别详解
2019/01/23 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
简单的JAVA编程面试题
2013/03/19 面试题
体育馆的标语
2014/06/24 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js