Yii

mysql建立索引的原则

三世轮回 提交于 2020-08-14 13:46:53
1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。 2.为经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。 3.为常作为查询条件的字段建立索引 如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。 4.限制索引的数目 索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。 5.尽量使用数据量少的索引 如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。 6.尽量使用前缀来索引 如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。 7.删除不再使用或者很少使用的索引

MVC架构的职责划分原则,对我很有启发,分享一下

北城以北 提交于 2020-08-14 11:49:47
博主 负责一个项目,用了 Yii Framework 的 MVC 框架,刚开始自以为结构很稳健。 但是随着对业务逻辑理解的深入,才开始意识到问题的严重。 我错误地理解了 MVC 中的 Controller ,想当然地根据以往的经验,把所有的业务逻辑都放在 Controller 的 action 中去实现。 于是,每一个 Controller 的 代码都上千行,越来越臃肿 。 最后,我下定决心重构代码,起源是一个对外开放 API 接口的需求。 按照现在的架构,代码基本无法复用,我需要把很多功能再重复写一遍,这实在是无法接受。 面向对象编程不仅仅是课本上的名词啊! 真正开始实践才发现,要有面向对象意识,有全局观,是多么难得的一件事情。 1 、到底什么是 MVC 模型-视图-控制器(MVC)是一种 设计框架(设计模式) 。 MVC 的 目标 是 将业务逻辑从用户界面的考虑中分离 。 这样,开发者就可以更容易地改变每一部分而不会影响其他。 在 MVC 中, Model 代表 数据和业务规则 ; View 包含了 用户界面元素,例如文本,表单 等; Controller 则管理模型和视图中的 通信 。 MVC 在各种编程语言中均有实现,例如 J2EE 应用开发中, View 可能由 jsp 实现;Controller 是一个 servlet,现在一般用 Struts 实现;Model

Swoole实现任务定时自动化调度详解,来学习下

余生颓废 提交于 2020-08-12 06:52:33
问题描述 这几天做银行对帐接口时,踩了一个坑,具体需求大致描述一下。 银行每天凌晨后,会开始准备昨天的交易流水数据,需要我们这边请求拿到。 因为他们给的是一个base64加密的zip压缩流,解开以后可以得到txt文件,里面就是我们需要的数据了。 业务程序写好以后,随手丢了一个定时任务就去睡觉了。 哪知道第二天上班的时候,检查。发现并没有拿到数据,查询一下日志的时候发现,凌晨服务端请求的时候,银行接口返回了:系统错误信息。 咨询银行那边后,银行那边相关人员建议我们多请求几次,但是在多次请求中,我发现银行那边是有频率限制的,最后得知,此接口只能半个小时才能请求一次。这就比较尴尬了,因为我不知道银行那边什么时候能返回数据给我。 于是这个问题怎么解决呢?理想的情况是,服务端请求数据,银行那边没有返回。然后程序等半个小时后,再请求一次,这样一直到银行那边返回正确的数据中止。 问题分析 这个功能换作别的语言也许不难,但是通过php实现的话,那就比较麻烦了。通常的话,我们可以搭配linux下的cron来实现,比如我们可以在凌晨到6:00之间做一个定时任务,每半个小时扫描一次php脚本,如果发现银行那边的状态依旧为失败的话,我们就执行一次php脚本去请求数据。直到请求到正确的数据,然后把状态更新为成功。 这不失为一种方法,但太傻了。比如说银行那边比较正常,凌晨,也就是第一次请求的时候

202006011105.gist

痞子三分冷 提交于 2020-08-12 05:57:32
如何提取kubernetes集群中特定账号的token值 [root@xtwj89 ~]#kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9

it猿课 PHPM课网实战开发微信服务号+Yii 2.0构建商城系统全栈应用

六月ゝ 毕业季﹏ 提交于 2020-08-11 16:34:02
(全) M课网实战课程实战开发微信服务号+Yii 2.0构建商城系统全栈应用 WechatIMG278.jpeg (168.16 KB, 下载次数: 0) 下载附件 7 小时前 上传 〖课程介绍〗: 微信服务号 +Yii2.0 构建商城系统全栈应用 依托微信服务号高级特性及Yii 2.0技术为核心,手把手带你从零开发一个带完整PC后台的微信图书商城的全栈应用,实现微信与商业系统相结合,改变编程思想,提升你的开发技能。 〖课程目录〗: 第1章 课程简介 本章内容会给大家通览本门课程的整体架构、功能模块、技术选型及课程安排,让大家在一个清晰的开发思路下,进行后续的学习,同时领着大家登陆book.54php.cn(微信服务号可以打开这个网站直接扫码体验)一起来演示一下项目。本次课程是严格按照商业系统进行架构开发的,从PC管理员端到微信/H5会员端,从零开始,通俗易... 第2章 微信公众号介绍 首先大家介绍公众号的完整体系,其次对比订阅号,服务号之间的区别,让大家对公众号和服务号有一个基本的了解,体现出服务号的优势,接着讲解服务号的9大高级权限。最后给大家介绍如何申请、如何测试服务号功能。 第3章 准备工作 本章将手把手领大家在windows和linux环境下配置我们的开发环境,Window平台使用wamp,Linux平台使用最流行的LNMP环境

PHPer需要掌握的php-fpm优化

泄露秘密 提交于 2020-08-11 08:21:52
1.通常情况我们修改/etc/php.ini文件,仅会修改错误日志与文件上传 #;;;;;;;;;;;;;;;;; # Error logging ; #;;;;;;;;;;;;;;;;; expose_php = Off # 关闭php版本信息 display_error = Off # 屏幕不显示错误日志 error_reporting = E_WARNING & E_ERROR # 记录php错误日志至后台 log_errors = On # 开启日志 error_log = /var/log/php_error.log # 错误日志记录的位置 date.timezone = PRC # 时区调整,默认PRC, 建议调整为Asia/Shanghai #;;;;;;;;;;;;;;; # File Uploads ; #;;;;;;;;;;;;;;; file_uploads = On # 开启文件上传功能,默认启动 upload_max_filesize = 300M # 允许上传文件的最大大小 post_max_size = 300M # 允许客户端单个POST请求发送的最大数据 max_file_uploads = 20 # 允许同时上传的文件的最大数量 memory_limit = 128M # 每个脚本执行最大内存 #/etc/php.ini优化配置如下 sql

MySQL多表查询优化

戏子无情 提交于 2020-08-10 16:41:50
一、多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了。这图只是让大家回忆一下,各种连接查询。 然后要告诉大家的是,需要根据查询的情况,想好使用哪种连接方式效率更高。 二、MySQL的JOIN实现原理 在MySQL 中,只有一种Join 算法,就是大名鼎鼎的Nested Loop Join,他没有其他很多数据库所提供的Hash Join,也没有Sort Merge Join。顾名思义,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与Join,则再通过前两个表的Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复。 ——摘自《MySQL 性能调优与架构设计》 三、补充:mysql对sql语句的容错问题 即在sql语句不完全符合书写建议的情况,mysql会允许这种情况,尽可能解释它: 1)一般cross join后面加上where条件,但是用cross join+on也是被解释为cross join+where; 2)一般内连接都需要加上on限定条件,如上面场景一;如果不加会被解释为交叉连接; 3)如果连接表格使用的是逗号,会被解释为交叉连接; 注

Yii中url美化笔记

喜夏-厌秋 提交于 2020-08-10 14:33:33
Yii 模块绑定二级域名 http://en.t.com 绑定的模块对应是/en 模块 //yii url 模块 'urlManager' => [ //'urlFormat' => 'path', 'class'=>'yii\web\UrlManager', 'enablePrettyUrl' => true, 'showScriptName' => true,//隐藏index.php 'rules' => [ "http://en.t.com/"=>"/en/default/index", "http://en.t.com/te"=>"/en/default/te", //http://en.t.com/detail/123 -----> /en/default/detail?id=123 "http://en.t.com/detail/<id:\d+>"=>"/en/default/detail" ] ], 来源: oschina 链接: https://my.oschina.net/hongjiang/blog/4287108

Yii2 rules 自定义规则

与世无争的帅哥 提交于 2020-08-09 20:42:40
Yii2 提供了一套完善的参数校验规则,但有时可能不满足实际需求,需要我们自定义规则,这里简单介绍下自定义规则的使用。 比如有个参数 country ,只能接收 'USA', 'Web',其余校验不通过。 代码如下: public $country ; public function rules() { return [ // 自定义validateCountry()方法校验规则 ['country', 'validateCountry'], ]; } public function validateCountry( $attribute , $params ) { if (! in_array ( $this -> $attribute , ['USA', 'Web' ])) { $this ->addError( $attribute , 'The country must be either "USA" or "Web".' ); } } 常见问题 : 自定义规则失效。 按上述代码其实有个规则失效问题,当 参数为空的时候或者已经在其他验证中失效 的情况下,是不走validateCountry() 方法的。 这时可以加上参数 skipOnEmpty 和 skipOnError 设置为 false。 代码如下: public $country ; public function