我正在将大量数据点添加到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
请务必仔细检查您的密钥名称!