Hot For Coding
Nginx启动提示找不到libpcre.so.1解决方法

启动nginx提示

error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

意思是找不到libpcre.so.1这个模块,而导致启动失败。

经过搜索资料,发现部分Linux系统存有的通病。要解决这个方法非常容易

如果是32位系统

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib

如果是64位系统

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib64

...

READ ALL

MySQL中应该怎样存储IP地址

为什么要问如何存储IP

首先就来阐明一下部分人得反问:为什么要问IP得知怎样存,直接varchar类型不久得了吗?

其实做任何程序设计都要在功能实现的基础上最大限度的优化性能。而数据库设计是程序设计中不可忽略的一个重要部分,所以巧存IP地址可以一定程度获得很大提升。

利用函数算法处理

在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少看空间。因为varchar是可变长形,需要多余的一个字节存储长度。另外int型在逻辑运算上要比varchar速度快。

...

READ ALL

MySQL中varchar与char类型区别

在这之前,我虽然知道varchar与char的主要区别是varchar是可变长,char是定长型。但要深入的了解varchar与char的区别却是一片空白,直到读了相关书籍以后才进一步认清两者更深入的一些区别。

varchar

保存了可变长度的字符串,是使用较多的字符串类型。它比固定长度类型占用更少的存储空间,因为它只占用了实际需要空间,比较灵活。但如果设置了ROW_FORMAT=FIXED创建的MyISAM引擎表,那么每行占用固定长的空间,就会造成浪费。

varchar使用额外的1到2字节来存储值得长度。如果列的最大长度小于或等于255,则使用1字节,否则使用2字节。

...

READ ALL

JavaScript判断一个值是否在数组中

在JavaScript中要判断一个值是否在数组中并没有函数直接使用,如PHP中就有in_array()这个函数。但我们可以写一个类似in_array()函数来判断是一个值否在函数中。

/**
 * JavaScript判断一个值是否在数组中
 * Nicholas Lee www.qttc.net
 */
 
// 定义一个判断函数
var in_array = function(arr){
  // 判断参数是不是数组
  var isArr =  arr && console.log(
    typeof arr==='object' ? arr.constructor===Array ? arr.length ? arr.length===1 ? arr[0]:arr.join(','):'an empty array': arr.constructor: typeof arr 
  );

  // 不是数组则抛出异常
  if(!isArr){
    throw "arguments is not Array"; 
  }

  // 遍历是否在数组中
  for(var i=0,k=arr.length;i<k;i++){
    if(this==arr[i]){
      return true;    
    }
  }

  // 如果不在数组中就会返回false
  return false;
}
 
// 给字符串添加原型
String.prototype.in_array = in_array;
// 给数字类型添加原型
Number.prototype.in_array = in_array;
 
// 声明一个数组
var arr = Array('blue','red','110','120');
 
// 字符串测试
var str = 'red';
var isInArray = str.in_array(arr);
console.log(isInArray);  // Output: true
 
// 数字测试
var num = 119;
var isInArray = num.in_array(arr);
console.log(isInArray);  // Output: false

...

READ ALL

360搜索与百度搜索竞争

前些日子姚晨主演的《搜索》刚火热上映不久,360就正式推出360搜索,虽然刚推出一周的时间,但从数据量来看貌似已对百度构成未知竞争。

昨天百度知道开始对360网址导航导入的搜索流量做提示,试图引导用户把百度设为首页。360网址导航已经连夜将原本的百度问答搜索替换为360自己的奇虎搜索。

上周四360推出的综合搜索引发各方关注。昨天起,360自主搜索引擎替换谷歌,成为360网址导航(hao.360.cn)的默认搜索引擎。在一些版本的360浏览器搜索框中,360搜索也已经被设置为默认搜索引擎。

来自多家网站的数据显示,虽然360搜索刚刚上线几天,但已经显露出强劲的流量增势。科技资讯网站“站长之家”和手机交流社区“安卓论坛”公布的数据显示,360搜索已经成为超过搜狗,成为仅次于百度的第二大流量来源。

...

READ ALL

Nginx搭建FLV视频服务器

FLV视频已经是绝大多数视频网站首选的视频类型,国内外著名的视频分享站YouTube、优酷、土豆、新浪博客、IQIYI等等都是Flash播放器播放FLV/MP4视频。

FLV有两种发布方式

  • 普通的HTTP方式 这种方式通常需要预先下载到本地才能播放,有缓冲,但下载后就不会占用服务器资源。
  • 流媒体方式 无需下载,可以实时播放任意拖拽进度,用户体验好但很耗服务器资源。

安装模块

在编译安装Nginx的时候把Flv Stream模块加上

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_flv_module
make && make install

...

READ ALL

小内存VPS服务器Nginx优化

VPS服务器最重要的性能指标就是内存大小,多个VPS服务器可以共享一颗CPU,但不能共享同一块内存。所以VPS的内存越大价格就越贵,但目前市面上也有不少小内存VPS服务器,对于PV不多的站点来说正好适合又不浪费。所以在小内存VPS服务器上适当优化Nginx是最好的优化方案。

只开启一个进程

Nginx每个进程都要耗费内存,可能有10M至15M左右,小内存就只开一个节省内存

worker_processes 1;

开启gzip压缩

对网页文件、CSS、JavaScript等开启gzip压缩,减少数据传输量、减少磁盘I/O、减少内存交换,节省内存提高访问速度。

...

READ ALL

开启Nginx的gzip压缩功能

Nginx的gzip(GNU-ZIP)是一种压缩技术,经过gzip压缩后页面大小可以比原来的35%甚至更小。

full

压缩以后,不仅节省流量,更重要的是提升访问速度。gzip压缩需要浏览器和服务器双方都支持,也就是服务器压缩,浏览器解压。但目前绝大多数的浏览器都已支持gzip类型压缩的解压解析技术,就连被唾弃的IE也都能支持

开启Nginx的gzip功能需要在nginx.conf配置文件的http{...}加入以下代码:

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

...

READ ALL

JavaScript Object.freeze冻结对象

Object.freeze是干嘛用的呢?看看API解释的

Prevents the modification of existing property attributes and values, and prevents the addition of new properties.

就是说把一个对象freeze之后就不能修改存在的属性和值了,就是key value都不能修改,而且也不能添加新的属性

// Create an object that has two properties.  
var obj = { name: "Nicholas", length: 10 }

// Freeze the object.  
Object.freeze(obj)

// Try to add a new property, and then verify that it is not added.   
obj.newProp = 50

console.log(obj.newProp) // Ouput: undefined

...

READ ALL

Linux中ls命令的一个细节

前两天做公司一个项目,需要在一个目录里ls获取所有txt文件列表,这原本是很简单的事情。不久之后,目录里多了一些其它文件,需要使用*号匹配符,结果发现ls获取文件列表使用通配符与不适用通配符是有点小区别的。

不使用通配符

[root@lee ~]# ls -1 /data0/demo/
a.txt
b.txt
c.txt
d.log
e.log
f.php
g.txt
h.log
i.txt

使用通配符

[root@lee ~]# ls -1 /data0/demo/*.txt
/data0/demo/a.txt
/data0/demo/b.txt
/data0/demo/c.txt
/data0/demo/g.txt
/data0/demo/i.txt

...

READ ALL