从Redis读数据时并发量大幅度下降

yukaige

问题描述

直接空跑时并发能到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。

希望各位大神帮忙解答或解决这个问题,万分感谢。

441 2 0
2个回答

a784910468

没redis,用户卡死了,不断刷新进入吧,造成qps虚高

  • yukaige 2022-11-26

    用浏览器访问可以看到输出redis里面的值,更改redis里面的值时输出也会更改,连接和配置没问题。

walkor

webman开了多少进程?如果业务带io 进程数建议是cpu的3-8倍,如果业务io很多,进程数可以开更高。

  • yukaige 2022-11-26

    默认的 cpu*2 16个,我增加下进程试试

  • yukaige 2022-11-26

    果然,提升了不少 只有get能到3W,加上set 1.5W

  • yukaige 2022-11-26

    大佬还有个问题,我将数据存到类的静态变量里面,这个变量是多进程都能访问还是存在数据同步的延迟,监听了下DB发现,会存在打印SQl的情况。

  • walkor 2022-11-26

    进程间变量是隔离的

  • yukaige 2022-11-28

    怎么可以进行进程间的变量同步呀

  • chaz6chez 2022-11-28

    有名管道、无名管道、socket、共享内存;
    如果想简单点,workerman有个channel组件,可以实现,基于socket的;
    但其实没必要,因为redis就是做这个工作的,完全可以使用redis就行

  • yukaige 2022-11-28

    嗯嗯,感谢大佬

🔝