|
1. 导出redis所有key。
速度还是比较快的,大约1G的数据导出100M的key。
2. 分割成小文件。
一是大文件会占用服务器大量内存,二则先处理一小部分数据检查一下正常数据是否被清掉等。
3. 循环,查询所有key的value,按条件删除
此处使用php脚本实现,进行一些逻辑处理。
业务简单可以用一条管道命令简单实现 redis-cli KEYS "key_prefix*" | xargs redis-cli DEL 。//注意*号
// exec('redis-cli KEYS "*" > redis_keys.txt');
// split -b 10m redis.txt redis_keys_
if( !isset($argv[1])){
echo '请输入key的文件名像这样: php del.php redis_keys_a'."\n";
die;
}
$content = file_get_contents($argv[1]);
$arr = explode("\n", $content);
$num = count($arr);
for($i=0;$i<$num ;$i++){
echo $i."\n";
if($arr[$i]==''){
continue;
}
exec("redis-cli get $arr[$i]", $info);
$str = $info[0];
unset($info);
if($str==''){
echo "empty\n";
continue;
}
$content = unserialize(unserialize($str));
if( !isset($content['user'])){
echo "no user\n";
exec("redis-cli del $arr[$i]");
}elseif(isset($content['user']) && strpos($content['user']['tel'], 'a')!==false){
exec("redis-cli del $arr[$i]");
echo $content['user']['tel']."\n";
}else{
echo $content['user']['tel']."\n";
}
} |
|
|