Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Redis SCARD返回了错误的结果?_Php_Redis_Predis - Fatal编程技术网

Php Redis SCARD返回了错误的结果?

Php Redis SCARD返回了错误的结果?,php,redis,predis,Php,Redis,Predis,我正在向redis集合中添加大量数据点: $t = 0; $redis = Redis::Connection(); foreach($adv as $a) { $t = $t + 1; print($t); //Prints to log $test = $redis -> sadd('database/ab/AL', $a -> id); print($test); //Prints to log } 当我调用redis->scard('dat

我正在向redis集合中添加大量数据点:

$t = 0;
$redis = Redis::Connection();
foreach($adv as $a) {
    $t = $t + 1;
    print($t); //Prints to log

    $test = $redis -> sadd('database/ab/AL', $a -> id);
    print($test); //Prints to log
}
当我调用
redis->scard('database/ab/AL')
我得到结果
9832
,我应该得到的答案是
9866

$t
是我输入的一个计数器,用于检查循环正在进行的迭代次数,
$t
是运行循环后的
9866
,考虑到scard正在返回
9832

然后我想可能添加了重复项,所以我从
sadd

1 [2015-06-29 16:24:55] local.INFO: 1 [] []
2 [2015-06-29 16:24:55] local.INFO: 1 [] []
3 [2015-06-29 16:24:55] local.INFO: 1 [] []
4 [2015-06-29 16:24:55] local.INFO: 1 [] []
5 [2015-06-29 16:24:55] local.INFO: 1 [] []
6 [2015-06-29 16:24:55] local.INFO: 1 [] []
...
9861 [2015-06-29 16:24:59] local.INFO: 1 [] []
9862 [2015-06-29 16:24:59] local.INFO: 1 [] []
9863 [2015-06-29 16:24:59] local.INFO: 1 [] []
9864 [2015-06-29 16:24:59] local.INFO: 1 [] []
9865 [2015-06-29 16:24:59] local.INFO: 1 [] []
9866 [2015-06-29 16:24:59] local.INFO: 1 [] []
整个日志中没有零,这意味着添加的每个元素都是唯一的。还有一些
9866
日志调用与
scard
结果相矛盾。 我尝试过使用redis cli进行检查,但仍然得到错误的结果。
给出了什么?

我实际上是在用一个变量键入值:

$redis->sadd('database/ab/state:'。$a->state,a->id)

原来有些状态是小写的,这会将这些值发送到另一个键

修正:
$redis->sadd('database/ab/state:')。strtoupper($a->state),a->id

现在,当我呼叫SCARD时,我得到了正确的号码,
9866


始终仔细检查您的密钥名称

您是否也用注释掉的管道记录了
SADD
响应?我几乎可以肯定,你有重复的,而且计数是正确的,但是在这种情况下,流水线可能会干扰响应是的,这些结果是在没有流水线的情况下得到的。我删除了注释部分以避免混淆。我确信没有复制品(尽管我可能错了)。我迭代的数据,
$adv
,来自使用
DISTINCT
修饰符的SQL查询建议:在运行代码之前,请在与数据库的不同连接中运行
监视器。这将向您显示所有涌入的命令。。。捕捉到这一点,就可以非常简单地看到哪里出了问题。@vp_arth我当然应该这么做,但为了简单起见,我修改了我发布的代码。下次我不会那么做了。我现在有两个错误要从中学到:)我只是有点生气:)我取消了我的反对票。还有一个证据,证明没有奇迹。我用大量的测试打破了我的redis,但你只是在问题上撒了谎<代码>始终在SO问题中提供实际代码