php的foreach循环6万多次应该如何使用多线程
Jun 06, 2016 pm 08:43 PM
背景:我在thinkphp框架下使用foreach循环生成一个缓存,然后在别的控制和方法下调用缓存。
面临的问题是首先排除按需生成,因为不确定6万多条数据中那一条能够用到,所以需要生成全部内容,又因为生成内容耗时太长所以发问题求教, 缓存中每条数据有6个字段其中4个为string,2个为int
现在的运行方式是直接foreach循环然后使用S方法生成文件缓存。 这样生成的文件缓存大约为15M,生成的时长为5-7s,含数据库查询时间。
foreach($data as $v){ $arr[$v['id']]=$v; } S('cache',$arr);
请问1、如果采用多线程方式,应该如何运行?
或者给我讲讲如何分多线程的原理也可以
【已解决】2、使用phpredis缓存的话,使用hash类型应该如何批量插入键值
我的意思是,将数组直接写入进去,但是不序列化他
$cache=new Redis(); $cache->connect(......) foreach($data as $v){ $arr[$v['id']]=$v; foreach($v as $k=>$val){ $cache->set($k,$val); } }
发现在phpredis中有一个hmset(key,$array)可以批量设置
回复内容:
背景:我在thinkphp框架下使用foreach循环生成一个缓存,然后在别的控制和方法下调用缓存。
面临的问题是首先排除按需生成,因为不确定6万多条数据中那一条能够用到,所以需要生成全部内容,又因为生成内容耗时太长所以发问题求教, 缓存中每条数据有6个字段其中4个为string,2个为int
现在的运行方式是直接foreach循环然后使用S方法生成文件缓存。 这样生成的文件缓存大约为15M,生成的时长为5-7s,含数据库查询时间。
foreach($data as $v){ $arr[$v['id']]=$v; } S('cache',$arr);
请问1、如果采用多线程方式,应该如何运行?
或者给我讲讲如何分多线程的原理也可以
【已解决】2、使用phpredis缓存的话,使用hash类型应该如何批量插入键值
我的意思是,将数组直接写入进去,但是不序列化他
$cache=new Redis(); $cache->connect(......) foreach($data as $v){ $arr[$v['id']]=$v; foreach($v as $k=>$val){ $cache->set($k,$val); } }
发现在phpredis中有一个hmset(key,$array)可以批量设置
还是用多进程吧,php中貌似对线程支持的不是很好,在一些系统上不能用。
你查看fork函数,然后就知道怎么用多进程了。

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP
