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"; } }