我正在尝试scan与Laravel 一起使用Redis。我可以发出一个返回10个键的请求,但我希望循环直到所有键都返回。我不确定如何使用laravel进行此操作。目前我有
scan
$test = Redis::scan(0, 'match', '*keypattern*');
我不知道是否有一种“ laravel”的方式。
编辑:
我使用作曲家进行导入predis/predis并与之合作
predis/predis
use Predis\Collection\Iterator; use Predis; ... $client = new Predis\Client([ 'scheme' => 'tcp', 'host' => 'localhost', 'port' => 6379, ]); foreach (new Iterator\Keyspace($client, '*keypattern*') as $key) { $arr[] = $key; }
但是我想知道laravel的方式
var_dump的单 Redis::scan
Redis::scan
array(2) { [0]=> string(4) "23" [1]=> array(10) { [0]=> string(19) "key17" [1]=> string(19) "key72" [2]=> string(76) "key11" [3]=> string(19) "key73" [4]=> string(19) "key63" [5]=> string(19) "key87" [6]=> string(19) "key70" [7]=> string(19) "key65" [8]=> string(19) "key82" [9]=> string(19) "key43" } }
当Redis外观直接将命令传递给Predis(或您可能会说Redis本身)时,这与Redis文档(http://redis.io/commands/scan)紧密相关。您可以使用游标(第一个数组条目)进行后续调用以迭代直到游标为零。
我整理了一种递归方法,以扫描所有条目:
function scanAllForMatch ($pattern, $cursor=null, $allResults=array()) { // Zero means full iteration if ($cursor==="0") { return $allResults; } // No $cursor means init if ($cursor===null) { $cursor = "0"; } // The call $result = Redis::scan($cursor, 'match', $pattern); // Append results to array $allResults = array_merge($allResults, $result[1]); // Recursive call until cursor is 0 return scanAllForMatch($pattern, $result[0], $allResults); }
请注意$this,如果您在类中使用了此功能,则可能需要在递归之前添加(将是return $this->scanAllForMatch(...))
$this
return $this->scanAllForMatch(...)
您可以这样称呼它:
// Don't pass a cursor yourself! $allResults = scanAllForMatch('*keypattern*');