Maison > développement back-end > tutoriel php > php的foreach循环6万多次应该如何使用多线程

php的foreach循环6万多次应该如何使用多线程

WBOY
Libérer: 2016-06-06 20:43:02
original
1403 Les gens l'ont consulté

背景:我在thinkphp框架下使用foreach循环生成一个缓存,然后在别的控制和方法下调用缓存。

面临的问题是首先排除按需生成,因为不确定6万多条数据中那一条能够用到,所以需要生成全部内容,又因为生成内容耗时太长所以发问题求教, 缓存中每条数据有6个字段其中4个为string,2个为int

现在的运行方式是直接foreach循环然后使用S方法生成文件缓存。 这样生成的文件缓存大约为15M,生成的时长为5-7s,含数据库查询时间。

<code class="lang-php">foreach($data as $v){
    $arr[$v['id']]=$v;
}
S('cache',$arr);
</code>
Copier après la connexion
Copier après la connexion

请问1、如果采用多线程方式,应该如何运行?
或者给我讲讲如何分多线程的原理也可以
【已解决】2、使用phpredis缓存的话,使用hash类型应该如何批量插入键值
我的意思是,将数组直接写入进去,但是不序列化他

<code class="lang-php">$cache=new Redis();
$cache->connect(......)
foreach($data as $v){
    $arr[$v['id']]=$v;
    foreach($v as $k=>$val){
        $cache->set($k,$val);
    }
}

</code>
Copier après la connexion
Copier après la connexion

发现在phpredis中有一个hmset(key,$array)可以批量设置

回复内容:

背景:我在thinkphp框架下使用foreach循环生成一个缓存,然后在别的控制和方法下调用缓存。

面临的问题是首先排除按需生成,因为不确定6万多条数据中那一条能够用到,所以需要生成全部内容,又因为生成内容耗时太长所以发问题求教, 缓存中每条数据有6个字段其中4个为string,2个为int

现在的运行方式是直接foreach循环然后使用S方法生成文件缓存。 这样生成的文件缓存大约为15M,生成的时长为5-7s,含数据库查询时间。

<code class="lang-php">foreach($data as $v){
    $arr[$v['id']]=$v;
}
S('cache',$arr);
</code>
Copier après la connexion
Copier après la connexion

请问1、如果采用多线程方式,应该如何运行?
或者给我讲讲如何分多线程的原理也可以
【已解决】2、使用phpredis缓存的话,使用hash类型应该如何批量插入键值
我的意思是,将数组直接写入进去,但是不序列化他

<code class="lang-php">$cache=new Redis();
$cache->connect(......)
foreach($data as $v){
    $arr[$v['id']]=$v;
    foreach($v as $k=>$val){
        $cache->set($k,$val);
    }
}

</code>
Copier après la connexion
Copier après la connexion

发现在phpredis中有一个hmset(key,$array)可以批量设置

还是用多进程吧,php中貌似对线程支持的不是很好,在一些系统上不能用。
你查看fork函数,然后就知道怎么用多进程了。

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal