• 史上最易懂的GitHub教程
  • Linux私房菜

本博客升级PHP7+Nginx1.9.6+启用HTTPS


升级PHP7

linux版本:64位CentOS 6.6

Nginx版本:nginx1.9.6

php版本:   php-7.0.0

 

发布:liujianxun | 查看全文 | 浏览(1552) | 分类:服务器 | 评论(0) | 2015年11月23日


为什么要使用 HTTP/2?


HTTP/2 使数据传输更高效,对你的应用程序更安全。 HTTP/2 相比于 HTTP/1.x 有五

发布:liujianxun | 查看全文 | 浏览(1482) | 分类:服务器 | 评论(0) | 2015年11月24日

关于

本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识。本书绝不是一本“Hello World”的教程。

状态

你正在阅读的已经是本书的最终版。因此,只有当进行错误更正以及针对新版本Node.js的改动进行对应的修正时,才会进行更新。

本书中的代码案例都在Node.js 0.6.11版本中测试过,可以正确工作。

读者对象

本书最适合与我有相似技术背景的读者: 至少对一门诸如Ruby、Python、PHP或者Java这样面向对象的语言有一定的经验;对JavaScript处于初学阶段,并且完全是一个Node.js的新手。

这里指的适合对其他编程语言有一定经验的开发者,意思是说,本书不会对诸如数据类型、变量、控制结构等等之类非常基础的概念作介绍。要读懂本书,这些基础的概念我都默认你已经会了。

然而,本书还是会对JavaScript中的函数和对象作详细介绍,因为它们与其他同类编程语言中的函数和对象有很大的不同。


发布:liujianxun | 查看全文 | 浏览(1028) | 分类:服务器 | 评论(0) | 2015年11月25日

关于HTTP中 200 OK (from cache) 与 304 Not Modified


问题:最近在chrome下检测本网站http请求状态发现,有一部分状态是304,有一部分是200(from cache),这是怎么回事呢?



答疑:


为什么有的缓存是 200 OK (from cache),有的缓存是 304 Not Modified 呢?很简单,看运维是否移除了 Entity Tag。移除了,就总是 200 OK (from cache)。没有移除,就两者交替出现。

其实, 200 OK (from cache)  是浏览器没有跟服务器确认,直接用了浏览器缓存;而 304 Not Modified 是浏览器和服务器多确认了一次缓存有效性,再用的缓存。

它们都是在设置了缓存的情况下触发的。。。


发布:liujianxun | 查看全文 | 浏览(983) | 分类:服务器 | 评论(0) | 2015年12月04日

关于nginx status状态详解


nginx发布:liujianxun | 查看全文 | 浏览(971) | 分类:服务器 | 评论(0) | 2015年12月04日


问题:原已经安装好的nginx,现在需要添加一个未被编译安装的模块,怎么做呢?


发布:liujianxun | 查看全文 | 浏览(1079) | 分类:服务器 | 评论(0) | 2015年12月04日


    网站高性能架构

发布:liujianxun | 查看全文 | 浏览(835) | 分类:服务器 | 评论(0) | 2015年12月05日

实例演示地址发布:liujianxun | 查看全文 | 浏览(1032) | 分类:前端总结 | 评论(0) | 2015年12月06日

       SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。
Read Uncommitted(读取未提交内容)

       在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
Read Committed(读取提交内容)

       这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
Repeatable Read(可重读)

       这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化)


发布:liujianxun | 查看全文 | 浏览(910) | 分类:MySQL | 评论(0) | 2016年01月26日

命令基本格式:

hadoop fs -cmd < args >

1.ls

hadoop fs -ls  /

列出hdfs文件系统根目录下的目录和文件


发布:liujianxun | 查看全文 | 浏览(788) | 分类:服务器 | 评论(0) | 2016年10月21日

流程分析:

Map端:

1.每个输入分片会让一个map任务来处理,默认情况下,以HDFS的一个块的大小(默认为64M)为一个分片,当然我们也可以设置块的大小。map输出的结果会暂且放在一个环形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),当该缓冲区快要溢出时(默认为缓冲区大小的80%,由io.sort.spill.percent属性控制),会在本地文件系统中创建一个溢出文件,将该缓冲区中的数据写入这个文件。

2.在写入磁盘之前,线程首先根据reduce任务的数目将数据划分为相同数目的分区,也就是一个reduce任务对应一个分区的数据。这样做是为了避免有些reduce任务分配到大量数据,而有些reduce任务却分到很少数据,甚至没有分到数据的尴尬局面。其实分区就是对数据进行hash的过程。然后对每个分区中的数据进行排序,如果此时设置了Combiner,将排序后的结果进行Combia操作,这样做的目的是让尽可能少的数据写入到磁盘。

3.当map任务输出最后一个记录时,可能会有很多的溢出文件,这时需要将这些文件合并。合并的过程中会不断地进行排序和combia操作,目的有两个:1.尽量减少每次写入磁盘的数据量;2.尽量减少下一复制阶段网络传输的数据量。最后合并成了一个已分区且已排序的文件。为了减少网络传输的数据量,这里可以将数据压缩,只要将mapred.compress.map.out设置为true就可以了。

4.将分区中的数据拷贝给相对应的reduce任务。有人可能会问:分区中的数据怎么知道它对应的reduce是哪个呢?其实map任务一直和其父TaskTracker保持联系,而TaskTracker又一直和JobTracker保持心跳。所以JobTracker中保存了整个集群中的宏观信息。只要reduce任务向JobTracker获取对应的map输出位置就ok了哦。

到这里,map端就分析完了。那到底什么是Shuffle呢?Shuffle的中文意思是“洗牌”,如果我们这样看:一个map产生的数据,结果通过hash过程分区却分配给了不同的reduce任务,是不是一个对数据洗牌的过程呢?呵呵。

Reduce端:

1.Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的。如果reduce端接受的数据量相当小,则直接存储在内存中(缓冲区大小由mapred.job.shuffle.input.buffer.percent属性控制,表示用作此用途的堆空间的百分比),如果数据量超过了该缓冲区大小的一定比例(由mapred.job.shuffle.merge.percent决定),则对数据合并后溢写到磁盘中。

2.随着溢写文件的增多,后台线程会将它们合并成一个更大的有序的文件,这样做是为了给后面的合并节省时间。其实不管在map端还是reduce端,MapReduce都是反复地执行排序,合并操作,现在终于明白了有些人为什么会说:排序是hadoop的灵魂。

3.合并的过程中会产生许多的中间文件(写入磁盘了),但MapReduce会让写入磁盘的数据尽可能地少,并且最后一次合并的结果并没有写入磁盘,而是直接输入到reduce函数。

发布:liujianxun | 查看全文 | 浏览(656) | 分类:服务器 | 评论(0) | 2016年10月21日

 

发布:liujianxun | 查看全文 | 浏览(634) | 分类:服务器 | 评论(0) | 2016年11月08日

 

发布:liujianxun | 查看全文 | 浏览(1170) | 分类:php编程 | 评论(0) | 2015年12月08日

发布:liujianxun | 查看全文 | 浏览(2014) | 分类:服务器 | 评论(0) | 2015年11月26日


发布:liujianxun | 查看全文 | 浏览(1403) | 分类:服务器 | 评论(0) | 2015年11月26日

#定义Nginx运行的用户和用户组

user www www;


#nginx进程数,建议设置为等于CPU总核心数。

worker_processes 8;


#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]

error_log /var/log/nginx/error.log info;


#进程文件

pid /var/run/nginx.pid;


#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。

worker_rlimit_nofile 65535;


发布:liujianxun | 查看全文 | 浏览(862) | 分类:服务器 | 评论(0) | 2015年11月24日


我想在同一个工作环境中,开启多个PHP-FPM实例支持不同PHP版本同时运行,如何解决?

发布:liujianxun | 查看全文 | 浏览(1338) | 分类:服务器 | 评论(0) | 2015年11月23日

>>Nginx + php-fpm<<
找到跟 nginx.conf 同一目录下的 fastcgi.conf ,在后面加上一句

fastcgi_param RUNTIME_ENVIROMENT DEV

保存,退出,重启nginx
$>nginx -s reload

此时,通过HTTP请求localhost/env.php
即可显示,自定义环境变量
RUNTIME_ENVIROMENT => DEV


发布:liujianxun | 查看全文 | 浏览(1830) | 分类:服务器 | 评论(0) | 2015年11月03日

引言

    正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。

    正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。(3)用来替换,比普通的替换更强大。

   正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。

    文章中的每一个举例,都可以点击进入到测试页面进行测试。闲话少说,开始。。。


发布:liujianxun | 查看全文 | 浏览(1100) | 分类:php编程 | 评论(0) | 2015年10月23日


首先,我们要采集数据,要有数据源

此次我们的经纬度数据来源于这个网 http:

发布:liujianxun | 查看全文 | 浏览(1272) | 分类:php编程 | 评论(0) | 2015年09月04日

如何用MOngoDB的地理空间索引实现“找到离当前位置最近的N个场所”


#本文要实现效果如下:

10_76_6f2e463cb566ef2.png


#Mongo的地理空间索引,可利用geonear进行范围刷选和排序

  所以首先,我们需要获取各大城市的经纬度坐标。关于如何利用PHP采集各大城市

  经纬度数据,这篇文章利用PHP采集各大城市经纬度数据  已详细介绍采集流程

...


发布:liujianxun | 查看全文 | 浏览(1618) | 分类:php编程 | 评论(0) | 2015年09月04日

针对游标对象MongoCursor的操作(MongoCursor类):

http://us.php.net/manual/en/class.mongocursor.php

循环或的结果记录:

$cursor = $coll->find($query,$fields);

while($cursor->hasNext()){

$r = $cursor->getNext();

var_dump($r);

}

或者

$cursor = $coll->find($query,$fields);

foreache($cursor as $k=>$v){

var_dump($v);

}

或者

$cursor = $coll->find($query,$fields);

$array= iterator_to_array($cursor);


发布:liujianxun | 查看全文 | 浏览(1326) | 分类:服务器 | 评论(0) | 2015年09月02日
« 之后的文章开放、分享、共创
<< 向左走,向右走 >>
更早的文章 »