第一次写博客,哈哈,纯属用来记录一下自己工作中遇到的问题及解决办法。

昨天因为工作的需求,需要做一个后台上传TXT文件,读取其中的内容,然后导入redis库中。要求速度快,并且支持至少10W以上的数据,而内容也就一个字段存类似openid和QQ。我一开始做的时候就老套路,遍历、hset,然后就发现非常的慢,一千条数据就花了30-32秒,当时就觉得不行,于是就请教了一个大佬,然后就得知了方法

我生成了20W的数据用来做测试,文件大小6M多。

话不多说,直接贴代码了

$lines = file_get_contents($_FILES['file']['tmp_name']);//获取文件内容
ini_set('memory_limit', '-1');//不要限制Mem大小,否则会报错
$line = explode("\r\n",$lines);//转换成数组
//实例化redis
$redis = new Redis();
//连接
$redis->connect('127.0.0.1', 6379);
$redis->pipeline();//开启管道
if(!$redis){
throw new Exception('redis连接失败!',1);
}
$key = $info['key'];
$c = 0;
$count = count($line);
$now = time();
for($i=0;$i<$count;$i++){
$res = $redis->hset($key,$line[$i],1);
if($res){
$c ++;
}
}
$redis->exec();

使用结果:

哈哈,即使就直接用time()方法获取的,是计秒的,没有毫秒那种效果,不过也可以看出来确实是非常的快,20W的数据不到两秒就存进去了

其实整个代码都非常简单,能让redis快速导入的就是一个点“pipeline”,开启了这个就可以了。哈哈以前没有用过,所以就小小的记录一下。
---------------------
作者:逝去日子如风
来源:CSDN
原文:https://blog.csdn.net/hzj1064189928/article/details/80499657
版权声明:本文为博主原创文章,转载请附上博文链接!

(转)php读取文件使用redis的pipeline导入大批量数据的更多相关文章

  1. php读取文件使用redis的pipeline(管道)导入大批量数据

    需求:需要做一个后台上传TXT文件,读取其中的内容,然后导入redis库中.要求速度快,并且支持至少10W以上的数据,而内容也就一个字段存类似openid和QQ 传统做法:我一开始做的时候就老套路,遍 ...

  2. python 读取文件第一列 空格隔开的数据

    file=open('6230hand.log','r') result=list() for c in file.readlines(): c_array=c.split(" " ...

  3. Excel——读取文件后——组装成待插入数据库数据——实体映射模式

    package com.it.excel.excelLearn; import java.io.IOException; import java.util.HashMap; import java.u ...

  4. Redis 管道pipeline

    Redis是一个cs模式的tcp server,使用和http类似的请求响应协议. 一个client可以通过一个socket连接发起多个请求命令. 每个请求命令发出后client通常会阻塞并等待red ...

  5. 【redis】pipeline - 管道模型

    redis-pipeline 2020-02-10: 因为我把github相关的wiki删了,所以导致破图...待解决.(讲真github-wiki跟project是2个url,真的不好用) 因为用的 ...

  6. Redis 单节点百万级别数据 读取 性能测试.

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 这里先进行造数据,向redis中写入五百万条数据,具体方式有如下三种: 方法一:(Lua 脚本) vim ...

  7. 大数据学习day34---spark14------1 redis的事务(pipeline)测试 ,2. 利用redis的pipeline实现数据统计的exactlyonce ,3 SparkStreaming中数据写入Hbase实现ExactlyOnce, 4.Spark StandAlone的执行模式,5 spark on yarn

    1 redis的事务(pipeline)测试 Redis本身对数据进行操作,单条命令是原子性的,但事务不保证原子性,且没有回滚.事务中任何命令执行失败,其余的命令仍会被执行,将Redis的多个操作放到 ...

  8. Java 创建文件夹和文件,字符串写入文件,读取文件

    两个函数如下: TextToFile(..)函数:将字符串写入给定文本文件: createDir(..)函数:创建一个文件夹,有判别是否存在的功能. public void TextToFile(fi ...

  9. C#读取文件为byte[]

    C#读取文件为byte[] 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// 读取程序生成byte /// </sum ...

随机推荐

  1. Java高级特性 第9节 Socket机制

    一.Socket简介 1.Socket概述 Java最初是作为网络编程语言出现的,它对网络的高度支持,使得客户端和服务器流畅的沟通变成现实.而在网络编程中,使用最多的就是Socket,每一个实用的网络 ...

  2. Ansible 批量修改密码

    客户要求每3个月修改一次主机密码.密码规则为客服提供的一串字符 xxxx + 主机后3位. 将需要登录主机添加到 Ansible. 将需要登录主机的公钥添加到 known_hosts ssh-keys ...

  3. python selenium-webdriver 下拉菜单处理 (九)

    测试过程中经常遇到下来菜单,比如说分页,每页显示的条数,以及语言的切换,很多时候经常是以下来菜单的形式展现,下面我们看一下selenium如何处理下来菜单. 首先selenium 很人性化的给提供了一 ...

  4. QNET,一款给力的APP弱网络测试工具

    目前在测试移动设备上进行弱网络专项测试的方案主要有两种: 通过Android设备连接到PC上进行弱网络测试,比如Fiddler,Charles,NET-Simulator等.基本思路是在PC上装一个F ...

  5. ASP.NET CORE 3 安装遇到的问题

    最近在研究 ASP.NET CORE, visualstudio2019 也已正式发布,本以为安装vs2019后就默认支持asp.net core 3,谁知是不支持的,需单独安装net core 3及 ...

  6. 关于git merge,rebase合并的差别,以及*(no branch)的处理。

    1.merge 在上篇介绍分支的时候有简单的说了一下分支的创建和合并,当时合并就是写的merge,这是依据两个不同分支的最后一次提交的commit对象c5,c7和两个分支的交叉点的commit对象c3 ...

  7. Linux操作汇总

    添加环境变量 CMD,或添加到/etc/profile,或添加到各自账户下的~/.profile.(后两种需要重新source) export PATH=/home/alan/Desktop/arm- ...

  8. apache+php+mysql安装与使用

    偷个懒,用的系统自带的apache和php apache安装与使用 Mac自带apache默认路径 主程序 /usr/sbin/httpd 模块 /usr/libexec/apache2 配置 /et ...

  9. 流程帮App风险评估

    一. 存在风险 此处罗列出了我们开发小组可能遇到8种的风险. 编号 风险名称 内容 发生概率 损失(人周) 危险度(周) 1 计划编制风险 对所要使用技术不熟悉,可能导致无法交付: 每个模块的实现一定 ...

  10. 转载:揪出MySQL磁盘消耗迅猛的真凶

    揪出MySQL磁盘消耗迅猛的真凶 背景 Part1:写在最前 当一张单表10亿数据量的表放在你面前,你将面临着什么? Part2:背景介绍 为了提升数据库资源利用率,一个实例中,在不互相影响,保证业务 ...