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 相关文章推荐
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
PHP insert语法详解
Jun 07 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
PHP中if和or运行效率对比
Dec 12 PHP
PHP的pcntl多进程用法实例
Mar 19 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
php微信公众号开发之秒杀
Oct 20 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 PHP
详解phpstorm2020最新破解方法
Sep 17 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
无线电广播的开始
2002/01/30 无线电
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
php.ini中date.timezone设置分析
2011/07/29 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
php实现的双色球算法示例
2017/06/20 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
python装饰器decorator介绍
2014/11/21 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
继承公证书
2014/04/09 职场文书
建房协议书
2014/04/11 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
学校献爱心活动总结
2014/07/08 职场文书
个人务虚会发言材料
2014/10/20 职场文书