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

背景:我在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函数,然后就知道怎么用多进程了。

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值