redis key全量導出與導出指定前綴的key


redis命令列表中有兩種方法可以全量導出所有的key:

(1)keys

  由於redis是單線程的,使用keys會導致redis服務阻塞,不建議線上服務采用這種方式。

(2)scan 命令,下面是使用scan命令實現導出全量key的代碼,每次掃1000個key,結果存放到指定的文件中

  

function redisScan($host, $port, $write_file = '/Users/admin/Documents/work/redis_test.txt') {

    $file_handler = fopen($write_file,'w+');

    $redis = new Redis();
    $redis->connect($host, $port, 5);
    $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);

    $it = null;
    $match = '*';
    $count = 1000;
    $tmp_result = '';
    $tmp_number = 0;

    do
    {
        $keysArr = $redis->scan($it,$match,$count);
        if($keysArr)
        {
            foreach ($keysArr as $key)
            {
                $tmp_result .= $key."\n";
                $tmp_number++;
            }

            if($tmp_number >= 1000)
            {
                fwrite($file_handler,$tmp_result);
                $tmp_result = '';
                $tmp_number = 0;
            }
        }

    }while($it > 0);

    if($tmp_result)
    {
        fwrite($file_handler,$tmp_result);
    }

    fclose($file_handler);

    return true;

}

 

如果需要獲取指定前綴的key(以abc為例),只需要修改上述代碼的match參數為 "abc*" 即可。


免責聲明!

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



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