详解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 intval的测试代码发现问题
Jul 27 PHP
joomla jce editor 解决上传中文名文件失败问题
Jun 09 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
PHP实现ftp上传文件示例
Aug 21 PHP
php实现检查文章是否被百度收录
Jan 27 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
php-fpm中max_children的配置
Mar 15 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
PHP中的超全局变量
2006/10/09 PHP
再次研究下cache_lite
2007/02/14 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
php计算函数执行时间的方法
2015/03/20 PHP
Yii rules常用规则示例
2016/03/15 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
JS array 数组详解
2009/03/22 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
详解python编译器和解释器的区别
2019/06/24 Python
浅谈Python中的模块
2020/06/10 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
旅游专业职业生涯规划范文
2014/01/13 职场文书
公司员工检讨书
2014/02/08 职场文书
小学评语大全
2014/04/22 职场文书
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js