項目中使用Redis的游標scan的一些小問題


      最近項目中有一個需求就是在下拉中要篩選車輛列表,本來想着是在內存中全部用程序去遍歷處理,但發現數據有點多,一個個去處理會有點慢。然后就找到了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";

用上面的程序,就能通過游標把所有符合的值取出來。在業務層使用就行了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM