最近項目中有一個需求就是在下拉中要篩選車輛列表,本來想着是在內存中全部用程序去遍歷處理,但發現數據有點多,一個個去處理會有點慢。然后就找到了redis的游標
感覺這個能滿足我的需求,我可以把key存成車牌號,value為車輛id的值,通過正則匹配到車牌號就能獲取車輛id來查找信息了。思路有了,接下來就開工了。
在官網上找到這么一段程序
/* Without enabling Redis::SCAN_RETRY (default condition) */ $it = NULL; do { // Scan for some keys $arr_keys = $redis->scan($it); // Redis may return empty results, so protect against that if ($arr_keys !== FALSE) { foreach($arr_keys as $str_key) { echo "Here is a key: $str_key\n"; } } } while ($it > 0); echo "No more keys to scan!\n"; /* With Redis::SCAN_RETRY enabled */ $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $it = NULL; /* phpredis will retry the SCAN command if empty results are returned from the server, so no empty results check is required. */ while ($arr_keys = $redis->scan($it)) { foreach ($arr_keys as $str_key) { echo "Here is a key: $str_key\n"; } } echo "No more keys to scan!\n";
這段程序在我的環境會有問題(php7). 會報 Parameter 1 to Redis::scan() expected to be a reference, value given
應該是那個游標對象$it得用引用。所以需要改成call_user_func_array調用
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $it = NULL; /* phpredis will retry the SCAN command if empty results are returned from the server, so no empty results check is required. */ while ($array = call_user_func_array(array($redis, 'scan'), array(&$it)) { foreach ($arr_keys as $str_key) { echo "Here is a key: $str_key\n"; } } echo "No more keys to scan!\n";
用上面的程序,就能通過游標把所有符合的值取出來。在業務層使用就行了
