Siam博客

Mysql合理建立索引,索引优化

数据库
写在前面 在我们日常使用数据库的时候,肯定避免不了对数据库的优化。那么对数据库的优化又少了不索引的知识。 是的,建立索引能极大地提高查询的效率。那么你知道吗,如果合理建立索引,可以更大地榨出数据库的性能——也就等同于进一步提高查询效率。 写下这篇文章就是为了记录一下对索引的优化,合理建立索引 ...
Read more

Mysql中varchar字符串的比较,swoole预处理参数绑定

数据库

写在前面

事情起因: 使用了一个varchar类型的字段储存数字值。 在根据该字段进行大小筛选的时候,出现该问题。 类似select * from sheets where s_status > 3

分析

php调用时条件传的是数字类型 组件生成的SQL语句直接执行正常

Read more

SMTP邮件服务器原理解析,php发送邮件,swoole发送邮件

计算机基础
写在前面 电子邮件是啥就不用介绍了吧,利用程序发送邮件,可以实现:客户财务报表推送、服务异常预警、自动订阅文章等等功能。 php来发送邮件的类库网上也有。比如:PHPMailer 等 但是由于类库年代久远,或者自己使用过程中出现了一些异常错误,导致一系列苦恼。 所以写下这篇文章,来讲明SMT ...
Read more

Thinkphp中模型的正确使用方式,ORM的思想概念

PHP
在Thinkphp的文档中关于框架特性的描述,有这么一句话 ORM:重构的数据库、模型及关联,MongoDb支持; 从这句话可以得知,Thinkphp中的数据库、模型,基于的ORM概念来完成。 ORM是什么? 对象-关系映射(OBJECT-RELATIONAL MAPPING,简称ORM ...
Read more

swoole如何对ip限制访问频率

SWOOLE
swoole如何对ip限制访问频率 在我们开发api的过程中,有的时候我们还需要考虑单个用户(ip)访问频率控制,避免被恶意调用。 归根到底也就只有两个步骤: 用户访问要统计次数 执行操作逻辑之前要判断次数频率是否过高,过高则不执行 easyswoole中实现Ip访问频率限制 本文章举例 ...
Read more

Layui模块化,改造传统jquery扩展为layui模块

前端

此篇文章比较偏向笔记类型

在我使用jquery扩展,拖拽组件的时候,因为使用的布局模板有些冲突,导致无法使用扩展,所以才会解决之后写下这篇文章。 Layui中内置了jquery 只有你所使用的模块有依赖到它,它才会加载,并且如果你的页面已经script引入了jquery,它并不会重复加载。内置的jquery模块去除了全局的$和jQuery。 这是layui文档中的描述,它内置了jq,但是去除了全局的$和jQuery对象,也就是在window的全局对外接口被删除了。 拖拽组件的实现 假设siam.js是一个扩展,里面提供了一个类似这样的方法

Read more

浅谈非堵塞程序的理解

计算机基础

这篇文章,主要讲讲非堵塞编程带给程序的意义。 在我们谈到今天的主题之前,先来做一点基础知识的补充。

什么是I/O

我们的计算机系统架构简易可看成如下,I/O接口连接其他硬件如:网卡、键盘鼠标、磁盘等。 I代表Input,输入数据。 O代表Output,输出数据。 计算机基础架构图 当程序需要发送网络请求或者从磁盘中读取文件等IO操作时 CPU发出指令,然后信号经过总线到达网卡或者磁盘 然后拿到数据,再经过总线到达主存中,CPU继续对主存中的数据进行操作。

CPU的执行速率:主频 比如3GHz = 一秒钟有30亿个时钟脉冲,执行一条指令一般只需要几个时钟脉冲。也就是一秒可以执行的指令经常是以亿计算的。

以网络请求为例(磁盘IO也是一样的原理),当CPU发出指令之后,想要得到结果需要经过很长的等待(比如网络延迟经常是几十ms时间,CPU都过了多少千万个时钟脉冲了)

同步、异步、堵塞、非堵塞的概念

相信看这篇文章的你也不是第一次看到这种概念,在很多文章中经常会以购物等场景做例子。 这里只做一个简单的介绍: 同步、异步分为一组概念; 堵塞、非堵塞分为一组概念; (同步、异步):关注的是:数据的接收方式 (堵塞、非堵塞):关注的是:是否等待结果返回 这是两个分组(因为它们的关注点不同) 但是往往同步跟堵塞是一起的,异步跟非堵塞是一起的。 如果我们需要同步接收数据,肯定要让当前程序暂停,等待数据返回再做处理。 如果我们选择了异步接收数据,程序还堵塞的话那就没什么意义了,所以非堵塞模式,一般会返回发送调用请求的结果,然后程序继续执行,直到结果准备好了,再通过回调函数等方式触发程序做处理。

Read more

HTTP协议中的GET、POST请求方法的区别

计算机基础

在我们日常打开网页、对接接口时,使用到的一般都是HTTP协议。 HTTP 的工作方式是客户端与服务器之间的请求-响应。 HTTP 请求方法有:HEAD、PUT、DELETE、OPTIONS、CONNECT 两种最常被用到的HTTP方法是:GETPOST。 本篇文章讲讲GETPOST两种请求方法的区别。

在浏览器上表现的区别

GET

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求参数在URL中的是可见的
  • GET 请求有长度限制
Read more

PHP异常处理函数,Thinkphp调试

PHP
在我们开发过程、已上线的应用中,程序经常会因为异常而崩溃。 比如:数据库执行失败、调用了不存在的类、调用了不存在的函数/方法… 如果是在开发过程中还好,问题肯定是由我们自己发现,可以清楚地看到异常的信息。 那么如果是已经上线的应用,那么出现问题的时候,客户往往是这么说的 在xxx的时候 网 ...
Read more

对象池、连接池的意义

计算机基础

这次我们来讲讲对象池、连接池的意义,在此之前我们先了解学习一些其他的基础知识,以便我们结合理解池的意义。

nginx与php-fpm的进程模型

nginx采用多进程模型,启动之后的进程将包含一个master多个worker进程。 master是worker的父进程,主要职责是用来管理worker进程的。

  • 向worker进程发送信号,如通知退出
  • 监控worker状态,当worker退出后(无论正常异常),可以重新启动新的worker。

可以实现从容重启:master进程在接收到信号后,会先重新加载配置,然后再启动新进程开始接收新请求,并向所有老进程发送信号告知不再接收新请求并在处理完所有未处理完的请求后自动退出。

worker进程负责处理请求,如果是静态文件则可以直接处理完,如果是php程序还需要调用php来处理,当php处理完成时获取php的返回,并返回给客户端。 采用的是异步非堵塞,当调用php的时候不会堵塞等待,会抽空处理下一个请求,当php处理完成时恢复之前的请求并返回给客户端。 php-fpm是php-cgi的管理器,在php >= 5.3.3就已经集成在php中了。 它的出现提供了更好的php管理方式

Read more
上一页 下一页