详解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 相关文章推荐
memcache一致性hash的php实现方法
Mar 05 PHP
使用纯php代码实现页面伪静态的方法
Jul 25 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
学习PHP的数组总结【经验】
May 05 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
php函数式编程简单示例
Aug 08 PHP
php回调函数处理数组操作示例
Apr 13 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 PHP
laravel开发环境homestead搭建过程详解
Jul 03 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
桌面中心(二)数据库写入
2006/10/09 PHP
php常用文件操作函数汇总
2014/11/22 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
一个超级简单的python web程序
2014/09/11 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python代码过长的换行方法
2018/07/19 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
详解Python中的测试工具
2019/06/09 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
私有程序集与共享程序集有什么区别
2013/04/05 面试题
2014年销售员工作总结
2014/12/01 职场文书
财务部会计岗位职责
2015/02/03 职场文书
中学团支部工作总结
2015/08/13 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python