1.PHP缓冲区;
memory_limit #读大文件PHP内存限制;
ini_set("output_buffering","0″) #配置缓冲大小,当到达是输出;
ob_end_clean()和ob_end_flush() #作用,就是终止缓冲。这样就不用等到有4096bytes的缓冲之后才被发送出去了。
ob_flush()和flush() #前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器。所以当缓冲存在的时候,我们必须ob_flush()和flush()同时使用。
ob_implicit_flush(true) #这个函数强制每当有输出的时候,即刻把输出发送到浏览器。这样就不需要每次输出(echo)后,都用flush()来发送到浏览器了。
ob_get_contents() #获取缓冲区的内容 ,使用的时候在前面加上ob_start();
参考地址:https://www.cnblogs.com/lq527/p/6228885.html
2.PHP并发;
文件锁
~~~
$data = $cache->get('key');
if(!$data){
$fp = fopen('lockfile');
if(flock($fp, LOCK_EX)){
$data = $cache->get('key');//拿到锁后再次检查缓存,这时可能已经有了
if(!$data){
$data = mysql->query();
$cache->set('key', $data);
}
flock($fp, LOCK_UN);
}
fclose($fp);
}
~~~
memcache实现锁
![](https://box.kancloud.cn/ef0a3ee4e50bc50d6353f6a6f71300ec_727x288.jpeg)
~~~
if($mc->add($key,$value))
{
//执行抽奖逻辑
//逻辑结束后,删除锁
$mc->delete($key);
//更新到数据库
}
else
{
//告诉用户正在抽奖,请稍后
}
~~~
redis消息队列
~~~
1).redis函数rpush,lpop
2).建议定时任务入队列
3)创建定时任务出队列
~~~
php数组实现消息队列
~~~
array_push($queue, $in); // 入队 等价于 $queue[] = $in;
$out = array_shift($queue); // 出队
~~~
3.高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务
Swoole:面向生产环境的 PHP 异步网络通信引擎
使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
4.提高PHP性能
装APC或者Xcache缓存
5.单机 nginx 应对高并发处理
~~~
worker_connections 10000;
ulimit -n 10240;
work_limit_nofile 10240 ;
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse #TCP连接立即回收、回用(recycle、reuse)
echo 1 > /proc/sys/net/ipv4/tcp_tw_recy #TCP连接立即回收、回用(recycle、reuse)
~~~
6.编写一个var_dump();