灰太狼

灰太狼

这家伙有点懒,还没写个性签名!

  • 财富值3320
  • 威望值80
  • 总积分4770

个人信息

  • 2019-08-19 已签到
    连续签到1天,获得了5个金钱
  • 2019-08-13 已签到
    连续签到1天,获得了5个金钱
  • 上面大神都说的很好,再教你一招,不写代码。

    mysql 时间字段用 timestamp 类型,设置为 ON UPDATE
    (自动更新时间)

  • $this->view是当前模版,
    AvatarAsset::register($this->view) 是将 资源文件 AvatarAsset 注入到模版中。
    (就是引入css和javascript)

  • 你可以理解成action的代码复用。

    对控制器的操作封装。
    例如:错误处理action,这个action在所有controller里都可能用到,或在别的模块里也用。

    那就单独出来一个action类,然后在控制器里需要使用的时候就在actions里配置一下,这个控制器就有了这个action功能。

    其实yii对这个ErrorAction已经做了封装。

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],//返回错误
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],//返回验证
    ];
    

    这样就相当于在controller里写了下面两个控制器

    public function actionError()
    {
        //其实这个是单独封装的action,在需要的时候通过配置附加进来
        //****如果你理解行为,你也可以理解这个。
    }
    
    public function actionCaptcha()
    {
        //其实这个是单独封装的action,在需要的时候通过配置附加进来
        //****如果你理解行为,你也可以理解这个。
    }
    

    单独封装的action 必须要实现run方法.因为yii在执行action的时候会执行这句:

    是重写actions()
    $result = call_user_func_array([$this, 'run'], $args);
    

    执行行为的时候其实是执行这句:

    是重写behaviors()
    

    return call_user_func_array([$object, $name], $params);]

    底层封装处理逻辑,将具体操作向外抛出,如果需要实现这个功能,只需要上层重写这个未实现的方法,将它实现,底层就会去处理你实现的这个方法。
    例如 你实现了actions(),behaviors(),xxx,那么yii就会处理里面的操作,
    把actions()里面的定义都当作这个controller的action,
    把behaviors()里定义的类里的函数都当作这个controller的函数,

  • 数据库1000条数据,300请求 200并发

    使用mysql排序(3次测试)
    Requests per second:    2106.74 [#/sec] (mean)
    Time per request:       94.933 [ms] (mean)
    Time per request:       0.475 [ms] (mean, across all concurrent requests)
    Transfer rate:          500.95 [Kbytes/sec] received
    
    
    Requests per second:    2149.77 [#/sec] (mean)
    Time per request:       93.033 [ms] (mean)
    Time per request:       0.465 [ms] (mean, across all concurrent requests)
    Transfer rate:          510.92 [Kbytes/sec] received
    
    Requests per second:    1953.02 [#/sec] (mean)
    Time per request:       102.405 [ms] (mean)
    Time per request:       0.512 [ms] (mean, across all concurrent requests)
    Transfer rate:          456.57 [Kbytes/sec] received
    
    使用rsort()排序(3次测试)
    Requests per second:    1885.29 [#/sec] (mean)
    Time per request:       106.085 [ms] (mean)
    Time per request:       0.530 [ms] (mean, across all concurrent requests)
    Transfer rate:          442.67 [Kbytes/sec] received
    
    Requests per second:    1885.29 [#/sec] (mean)
    Time per request:       106.085 [ms] (mean)
    Time per request:       0.530 [ms] (mean, across all concurrent requests)
    Transfer rate:          442.67 [Kbytes/sec] received
    
    
    Requests per second:    1940.47 [#/sec] (mean)
    Time per request:       103.068 [ms] (mean)
    Time per request:       0.515 [ms] (mean, across all concurrent requests)
    Transfer rate:          463.27 [Kbytes/sec] received
    

    从结果看,mysql order by 排序比PHP处理排序快,这里使用的是php内置函数rsort()都比mysql的排序慢了,如果自己封装一个排序操作函数,速度会更慢。
    所以结论: mysql order by 排序 > php内置排序函数 > 自定义排序函数

  • 1:检查mysql是否开启了binlog ON是开启状态
    48FCA136-C67B-42D5-92A0-FCBB6E1F02B4.png

    2:检查 my.cnf文件的 log-bin目录,这个目录是记录回滚操作记录文件。

    3:使用 #mysqlbinlog log-bin目录(如上2)/mysql-bin.000001 >/usr/local/log/mysql-bin-000001.sql

    例如:#mysqlbinlog /usr/local/log/mysql-bin.000001 > /usr/local/log/mysql-bin-000001.sql
    备注:(mysqlbinlog --start-position=120 --stop-position=2174941 操作点参数)
    
    

    4:打开生成的 /usr/local/log/mysql-bin-000001.sql 文件,把里面的delete, create dababase,create table等无关操作需要删掉,自己一点点排查下,或用操作点--start-position 来过滤。

    5:过滤完毕 /usr/local/log/mysql-bin-000001.sql 后执行

    #mysql56 -uroot -p </usr/local/log/mysql-bin-000001.sql

    6:去查询表,发现数据回来了。

  • 回复了 的回答

    用这个命令 有两个前提:

    1、正确安装 yii2-faker 这个扩展

    php composer.phar require --prefer-dist yiisoft/yii2-faker
    

    2、正确配置这个扩展,在 console.php 中

    'controllerMap' => [
        'fixture' => [
            'class' => 'yii\faker\FixtureController',
        ],
    ],
    

    依次检查

    哦,命令是在子类 yii\faker\FixtureController 实现里的哈,是指子类 'class' => 'yii\faker\FixtureController',Yii 默认是 'class' => 'yii\console\controllers\FixtureController',哎,没注意到这里。可以了,感谢!

总监 等级规则
4770/5000
资料完整度
10/100
用户活跃度
0/100

Ta的关注

8

Ta的粉丝

26

Ta的访客

112