redis_csv.php
批量将redis内容导出到csv格式。先根据key,scan一次,然后拿到key之后,取出每个的hash内容,再存入到csv文件中。
参考文章
https://www.php.cn/php-weizijiaocheng-391494.html
scan需要setOption
$redis->setOption(Redis::OPT_SCAN,Redis::SCAN_RETRY);
scan命令每次迭代的时候,有可能返回空,但这并不是结束的标志,而是当返回的迭代的值为”0″时才算结束。
通过将scan函数的第三个参数count设定为一个较大的数。
通过setOption函数来设定迭代时的行为。 setOption的操作,这个操作的作用是啥呢?这个操作就是告诉redis扩展,当执行scan命令后,返回的结果集为空的话,函数不返回,而是直接继续执行scan命令,当然,这些步骤都是由扩展自动完成,当scan函数返回的时候,要么返回false,即迭代结束,未发现匹配模式pattern的key,要么就返回匹配的key,而不再会返回空数组了。
批量将redis内容导出到csv格式
define('REDIS_HOST','10.172.16.26');
define('REDIS_PORT',1039);
define('REDIS_PASS','NTc1MzUy');
$redis = new \Redis();
$redis->connect(REDIS_HOST, REDIS_PORT);
$redis->auth(REDIS_PASS);
$redis->setOption(Redis::OPT_SCAN,Redis::SCAN_RETRY);
// var_dump($redis->ping());
$outfile = fopen('out.csv','w');
$iterator = null;
while ($keys = $redis->scan($iterator, 'net*')) {
foreach ($keys as $key) {
// echo $key . PHP_EOL;
$hash = $redis->hGetAll($key);
foreach($hash as $k=>$v){
fputcsv($outfile,[$key,$k,$v]);
}
}
}
其他
$redis = new Redis();
$redis->connect('localhost', 6379);
$iterator = null;while (true) {
$keys = $redis->scan($iterator, 'test*');
if ($keys === false) {//迭代结束,未找到匹配pattern的key
return;
}
foreach ($keys as $key) {
echo $key . PHP_EOL;
}
}
sscan 方法