Redis SCARD返回错误的结果


Redis SCARD returning the wrong results?

我正在将大量数据点添加到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 [] []

整个日志中没有零,这意味着添加的每个元素都是唯一的。还有与scard结果相矛盾的9866日志调用。我尝试过使用redis-cli进行检查,但仍然得到错误的结果。什么东西?

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

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

事实证明,有些状态是小写的,这会将这些值发送到另一个键。

修复:$redis->sadd('database/ab/state:'.strtoupper($a->state), a->id);

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

请务必仔细检查您的密钥名称!