之前直接使用$this->redis->scan($it, $pattern);
取到的都是重复的数据。后来参考网上的解决方法,使用call_user_func_array
方式调用就可以了。
public function scan()
{
$it = null;
$pattern = 'shortlink:*:url';
$count = 50;
/* 设置遍历的特性为不重复查找,该情况下扩展只会scan一次,所以可能会返回空集合 */
// $this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_NORETRY);
$this->redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);
// while (false !== ($keysArr = $this->redis->scan($it, $pattern, $count))) {
while ($keys = call_user_func_array(array($this->redis, 'scan'), array(&$it, $pattern))) {
foreach ($keys as $i=>$key) {
echo $i . '.' . $key . PHP_EOL;
}
// dd($it);
}
}