详解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中文件上传的安全问题
Oct 09 PHP
php生成xml简单实例代码
Dec 16 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
浅谈PHP调用Webservice思路及源码分享
Jun 04 PHP
php简单图像创建入门实例
Jun 10 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 PHP
php compact 通过变量创建数组
Nov 15 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
Oct 10 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
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
Python元组知识点总结
2019/02/18 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
python数值基础知识浅析
2019/11/19 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
python os.rename实例用法详解
2020/12/06 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
人力资源管理专业学生自我评价
2013/11/20 职场文书
庆八一活动方案
2014/01/25 职场文书
卖房协议书
2014/04/11 职场文书
联谊活动总结
2014/08/28 职场文书
授权委托书怎么写
2014/09/25 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS