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*" 即可。
