批量清除redis内存数据

1. 导出redis所有key。

    速度还是比较快的,大约1G的数据导出100M的key。

2. 分割成小文件。

    一是大文件会占用服务器大量内存,二则先处理一小部分数据检查一下正常数据是否被清掉等。

3. 循环,查询所有key的value,按条件删除

    此处使用php脚本实现,进行一些逻辑处理。

    业务简单可以用一条管道命令简单实现 redis-cli KEYS "key_prefix*" | xargs redis-cli DEL 。//注意*号

扫描二维码关注公众号,回复: 311453 查看本文章
// 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";
	}
}

猜你喜欢

转载自ww111.iteye.com/blog/2263359