之前直接使用$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);
}
}