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  方法