您的位置:首页 > 数据库 > Redis

phpredis方法在不同版本使用的异常

2017-04-17 00:00 453 查看
摘要: zrevrank在不同的版本中出现不同的表现

问题:线上的phpredis有两个不同的版本,旧的phpredis2.2.5,新的phpredis3.1.2

在phpredis2.2.5中,php代码如下:

<?php

$redis = new Redis();
$redis->connect("127.0.0.1", 6379);

$key = "abc";
$redis->zrevrank($key, (double)45555);
$redis->zrevrank($key, (float)45555);
$redis->zrevrank($key, 45555);
$redis->zrevrank($key, 45555);

在redis-server中使用monitor进行监控,发现执行的命令如下所示:

"ZREVRANK" "abc" "45555"
"ZREVRANK" "abc" "45555"
"ZREVRANK" "abc" "45555"
"ZREVRANK" "abc" "45555"

从上面的分析中,可以看出,在phpredis2.2.5中,php调用phpredis的方法,无法传递的是double,float,string或者int,执行的命令是相同的。

在phpredis3.1.2中,php代码如下:

<?php

$redis = new Redis();
$redis->connect("127.0.0.1", 6379);

$key = "abc";
$redis->zrevrank($key, (double)45555);
$redis->zrevrank($key, (float)45555);
$redis->zrevrank($key, 45555);
$redis->zrevrank($key, 45555);

在redis-server中使用monitor进行监控,发现执行的命令如下所示:

"ZREVRANK" "abc" "4.5555e+4"
"ZREVRANK" "abc" "4.5555e+4"
"ZREVRANK" "abc" "45555"
"ZREVRANK" "abc" "45555"

从上面的分析可以看出,在phpredis3.1.2中,php调用phpredis的方法,传递的member成员如果是double,float是与int,string不相同的。

测试了phpredis的 string,list,set,hash,zset数据类型,发现set和zset存在这样的情况,而且是出现在key中的member中,具体的phpredis源码的实现导致这个问题,稍后会添加上来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  phpredis zrevrank