直接空跑时并发能到4.8W并发,增加了Redis读取后并发降到了7.8K。
空跑时
从redis中读数据
代码如下:
<?php
namespace app\Controller;
use app\Module\User\UserBean;
use support\Redis;
use support\Request;
class IndexController extends Controller
{
function index(Request $request)
{
//空跑时取值
//$str = "sdaaaaaaaaaaaaaaaaaaaaaaaafsdfsdfsdfsd";
//从redis中取值
$str = Redis::get('test');
return $str;
}
}
服务器为 腾讯云8核16G服务器,redis为腾讯云redis,redis cpu 未到20%,走的内网,带宽足够。同机器部署swoole5进行测试 没接redis 为3.8W,接入redis后为2W。
希望各位大神帮忙解答或解决这个问题,万分感谢。
没redis,用户卡死了,不断刷新进入吧,造成qps虚高
用浏览器访问可以看到输出redis里面的值,更改redis里面的值时输出也会更改,连接和配置没问题。
webman开了多少进程?如果业务带io 进程数建议是cpu的3-8倍,如果业务io很多,进程数可以开更高。
默认的 cpu*2 16个,我增加下进程试试
果然,提升了不少 只有get能到3W,加上set 1.5W
大佬还有个问题,我将数据存到类的静态变量里面,这个变量是多进程都能访问还是存在数据同步的延迟,监听了下DB发现,会存在打印SQl的情况。
进程间变量是隔离的
怎么可以进行进程间的变量同步呀
有名管道、无名管道、socket、共享内存;
如果想简单点,workerman有个channel组件,可以实现,基于socket的;
但其实没必要,因为redis就是做这个工作的,完全可以使用redis就行
嗯嗯,感谢大佬