November 25, 2016
Laravel中的异常处理
"Eloquent try/catch on duplicate key Exception and delete?\nI’ve a form for a new vendor where the controller listens for its POST. From there on I’m creating a new endor and the equivalential login for this vendor.\nController :\n$vendor = Vendor::create( $request-\u0026gt;all() ); $login = Vendor::createLogin($vendor-\u0026gt;vendor_id); the createLogin function :\npublic static function createLogin($lid){ $name = self::find($lid)-\u0026gt;vendor_name; $name = explode(\u0026#39; \u0026#39;, $name); $vendor_login = [ …"
November 24, 2016
MySQL的InnoDB引擎强烈建议使用自增主键的原因
"1)InnoDB使用聚集索引,数据记录本身被存于主索引的叶子节点上,这就要求同一个叶子节点内的各条数据记录按主键顺序存放,因此每当一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子,则开辟一个新的页(节点)。\n如果表使用自增主键,那么每次插入新的记录时,记录就会顺序添加到当前索引节点后续位置,当一页写满,就会自动开辟一个新的页。这样就就会形成一个紧凑的索引结构,近似顺序填满,由于每次插入时也不需要移动所有数据,因此效率很高,也不会增加很多额外的开销维护索引。\n如果使用非自增主键,由于每次插入主键的值近乎于随机,因此每次新纪录都要被插到现有索引页的中间某个位置,此时MySQL不得不为了将新纪录插到合适位置而移动数据,甚至目标页面可能已经被写到磁盘而从缓存中清除,这增加了很多额外开销,同时频繁的移动,分页造成了大量的碎片,得到不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建并优化填充页面。\n2)由于MySQL从磁盘读取数据时一块一块来读取的,同时,根据局部性原理,MySQL引擎会选择预读一部分和你当前读数据所在内存相邻的数据块,这个 …"
November 23, 2016
[MySQL优化案例]系列 — slave延迟很大优化方法
"http://imysql.cn/2015/04/12/mysql-optimization-case-howto-resolve-slave-delay.shtml"
November 21, 2016
mysql中数据类型与占用空间大小的关系
"1、 如一个表有10个int类型的字段,那么每行数据大小为\n4(每个int类型占用4字节byte) * 10 = 40Bytes\n[][1]\n2、 如一个表有10个varchar(20)的字段,编码为utf8,那每行占用大小为\n3(每个汉字占用3字节) * 20 * 10 = 600Bytes\n如果是英文字符的话,则为\n1(1个字符占用1个字节) * 20 * 10 = 200Bytes\n[][2]\n则以上两种情况 ,每行的数据均\u0026lt;8K (1024byte * 8) ,符合以下规则( 1024byte = 1KB)\n[]"
November 21, 2016
mysql压力测试工具spcc-mysql
"http://imysql.cn/2014/10/10/tpcc-mysql-full-user-manual.shtml http://imysql.com/tag/压测"
November 18, 2016
Laravel框架数据库CURD操作、连贯操作使用方法
"Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。\n一、Selects\n检索表中的所有行\n$users = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;get(); foreach ($users as $user) { var_dump($user-\u0026gt;name); } 从表检索单个行\n$user = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;where(\u0026#39;name\u0026#39;, \u0026#39;John\u0026#39;)-\u0026gt;first(); var_dump($user-\u0026gt;name); 检索单个列的行\n$name = DB::table(\u0026#39;users\u0026#39;)-\u0026gt;where(\u0026#39;name\u0026#39;, \u0026#39;John\u0026#39;)-\u0026gt;pluck(\u0026#39;name\u0026#39;); 检索一个列值列表\n$roles = …"
November 13, 2016
PHP中的max_input_vars指令
"今天接到客服部工作人员反馈的一个问题,客户使用产品系统是允许用户添加产品属性的,而每个属性是由多个表单域组成 ,这样当每添加一个属性就等于添加了n个表单域,这个客户添加的非常的多,发现在提交保存的时候总是失败,提示其中一个表单元素的索引值不存在,经测试是发现服务端接收的一些表单域丢失了一部分。起初分析的是服务器接收的数据超出了php设置的max_post_size(其实当时已经设置了8M,足够使用了),修改了测试发现此问题仍然存在。后来将用户原来的一些添加的表单元素进行删除,再重新添加同样数据库表单域可以成功,但一旦超出一定数量的表单域就会发生丢失的情况,这个时候首先怀疑的是apache是否有类似限制接收隐藏域的指令,找了没有找到,紧接着在php中批到一个max_input_vars这个指令,意思就是说php中允许接收的最大表单域数据,到目前为止基本上是确定这个原因引起的了,奖其修改为2000,重启Apache,发现一切正常。\n总结:提起php中的max_input_vars 估计很少人知道这个这个指令,因为他的使用场景实在是太少了,在php.ini中这个指令的定义是指服务端最大可以接 …"
November 9, 2016
使用supervisord监控php脚本
"官网: http://www.supervisord.org\n一、安装supervisord\n$brew install supervisord 在mac下安装要比linux下安装方便的多。\n二、配置\n修改/usr/local/etc/supervisord.ini文件,取消以下几行注释\n[inet_http_server] ; inet (TCP) server disabled by default port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) username=user ; (default is no username (open server)) password=123 ; (default is no password (open server)) 这样就可以通过浏览器对进行管理了。\n三、添加一个新应用\n创建一个a.php文件,内容如下:\nwhile(true){ echo \u0026#39;a\u0026#39; . time() . \u0026#34;\\r\\n\u0026#34;; sleep(1); } …"
November 4, 2016
在linux下,解决修改文件权限引起的git出现的文件变化问题
"有时候,我们将服务器上的web文件夹的权限进行了修改,但git默认是也会记录权限状态的,这个时间用git status会发现所有的文件都处于被修改的状,这显示不是我们想要的。这时我们只要让git把文件权限忽略掉就可以了。\n在操作前首先我们确认一下当前配置项core.filemode,默认为true,(也可以使用cat .git/config查看)\n$ git config --list 然后执行\n$ git config core.filemode false 这样就设置了忽略文件权限。查看下配置:\n$ cat .git/config [] git忽略文件权限的配置"