详解PHP多个进程配合redis的有序集合实现大文件去重


Posted in PHP onMarch 06, 2019

1.对一个大文件比如我的文件为

-rw-r--r-- 1 ubuntu ubuntu 9.1G Mar 1 17:53 2018-12-awk-uniq.txt

2.使用split命令切割成10个小文件

split -b 1000m 2018-12-awk-uniq.txt -b 按照字节切割 , 支持单位m和k

详解PHP多个进程配合redis的有序集合实现大文件去重

3.使用10个php进程读取文件 , 插入redis的有序集合结构中 , 重复的是插不进去的 ,因此可以起到去重的作用

<?php
 
$file=$argv[1];
//守护进程
umask(0); //把文件掩码清0
if (pcntl_fork() != 0){ //是父进程,父进程退出
    exit();
}  
posix_setsid();//设置新会话组长,脱离终端
if (pcntl_fork() != 0){ //是第一子进程,结束第一子进程 
    exit();
}  
 
 
$start=memory_get_usage();
 
$redis=new Redis();
$redis->connect('127.0.0.1', 6379);
 
$handle = fopen("./{$file}", 'rb');
while (feof($handle)===false) {
    $line=fgets($handle);
    $email=str_replace("\n","",$line);
    $redis->zAdd('emails', 1, $email);
}

详解PHP多个进程配合redis的有序集合实现大文件去重

4. redis中查看获取的数据

zcard emails 获取元素个数

详解PHP多个进程配合redis的有序集合实现大文件去重

取一定范围的元素 , 比如从100000开始 到 100100结束

zrange emails 100000 100100 WITHSCORES

以上所述是小编给大家介绍的PHP多个进程配合redis的有序集合实现大文件去重详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php select,radio和checkbox默认选择的实现方法
May 15 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
PHP遍历数组的三种方法及效率对比分析
Feb 12 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
PHP实现一维数组与二维数组去重功能示例
May 24 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 PHP
php给数组赋值的实例方法
Sep 26 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
一次因composer错误使用引发的问题与解决
Mar 06 #PHP
利用PHP如何统计Nginx日志的User Agent数据
Mar 06 #PHP
浅谈php://filter的妙用
Mar 05 #PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 #PHP
统计PHP目录中的文件数方法
Mar 05 #PHP
PHP常见字符串操作函数与用法总结
Mar 04 #PHP
php+Ajax处理xml与json格式数据的方法示例
Mar 04 #PHP
You might like
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
js查错流程归纳
2012/05/04 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
js实现登录验证码
2016/12/22 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
python机器学习之神经网络(三)
2017/12/20 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
营销与策划应届生求职信
2013/11/04 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
鉴史问廉观后感
2015/06/10 职场文书
遗失证明范文
2015/06/19 职场文书