nginx中可以使用rewrite配置url的重定向,rewrite指令可以位于server段,也可以位于location中,配置rewrite后通过/usr/local/nginx/sbin/nginx -t检查配置时,出现如下错误:
nginx: [emerg] directive "rewrite" is not terminated by ";" in /usr/local/nginx/conf/nginx.conf:139
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
解决的办法是把规则段使用引号引起来。例如:
rewrite ^/u_(.{7})\.js$ /action/js.php?i=$1 break;
修改为
rewrite "^/u_(.{7})\.js$" /action/js.php?i=$1 break;
本条可以不用引号
rewrite ^/u_(\d+)\.js$ /action/js.php?i=$1 break;
为什么有些必须要引号,有些又可以省略呢,仔细看第一条规则,里面出现了符号 “{、}”,应该是它造成的,因为配置文件中都是用它来作为配置的段起止标记,所以为了安全起见,最好还是都带上引号。
想要在php中使用memcached,就必须按照支持memcached的扩展,目前有两种,一个是memcache,另一个是memcached。memcache是原生实现的,支持OO和非OO两套接口并存,而memcached是使用libmemcached,只支持OO接口。更多关于他们的区别,请参考:http://hi.baidu.com/dong_love_yan/blog/item/afbe1e12d22e7512203f2e21.html。本文以安装memcached扩展为例。
libmemcached下载地址:https://launchpad.net/libmemcached/+download
memcached下载地址:http://pecl.php.net/package/memcached
使用wget下载
wget http://launchpad.net/libmemcached/1.0/1.0.2/+download/libmemcached-1.0.2.tar.gz
wget http://pecl.php.net/get/memcached-1.0.2.tgz
得到两个文件libmemcached-1.0.2.tar.gz和memcached-1.0.2.tgz
安装libmemcached-1.0.2.tar.gz,解压后进入解压的文件夹,执行
./configure --prefix=/usr/local/libmemcached --with-memcached
make
make install
安装memcached-1.0.2.tgz,解压后进入解压的文件夹,执行
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached/
make
make install
其中 phpize位于php安装路径的bin目录下
修改php.inp,增加如下信息:
extension=memcached.so
centos下memecached安装笔记
项目地址:http://memcached.org/,选一个比较新的版本,本文选用的memcached-1.4.10.tar.gz,使用wget下载到本地
wget http://www.memcached.org/files/memcached-1.4.24.tar.gz
memecached依赖libevent库,可以用rpm -qa | grep libevent检查本机是否装有该库,如果没有按照,用yum安装,
yum -y install libevent libevent-devel
解压下载的源代码,进入解压后的文件夹,执行
./configure --prefix=/usr/local/memcached
make
make install
如果不出意外,memcached服务就安装成功了,安装的路径为/usr/local/memcached,启动服务如下:
/usr/local/memcached/bin/memcached -d -m 128 -l 127.0.0.1 -u root
其中
-d 以守护程序(daemon)方式运行 memcached;
-m 设置 memcached 可以使用的内存大小,单位为 M;
-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;
-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;
-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。
更多参数可以使用 /usr/local/memcached/bin/memcached -h 获取。
停止服务可以使用kill -9 memcached进程号
有一个perl脚本的工具,可以查看memcached的运行情况,下载地址:memcached-tool
运行方式:
perl memcached-tool 127.0.0.1:11211 stats
以前一直用echo的方式来清空一个文件的内容,例如 echo “” > file_name,这样虽说能清掉文件的内容,但是文件会有一个空行,其实cat能更好的胜任此项任务,cat 一个空文件然后重定向文件即可。那里去找这个空文件呢,系统的/dev/null就是一个很好选择,所以如下命令
cat /dev/null > file_name
就可以彻底清空文件的内容了。
执行linux命令或脚本时,如果不想打印出错误信息,可以使用
command 2>/dev/null
注意:2>/dev/null中间不要有空格
同样,如果不想看到标准的输出,则可以这样
command 1>/dev/null
要是不想看到任何输出,则:
command >/dev/null 2>&1
linux有3个默认的I/O
- 0 是标准输入,一般是键盘
- 1 是标准输出,一般是屏幕了
- 2 是标准错误,有时候屏幕上可以看到,但是重定向的文件中看不到的就是它了
现在知道上述的1、2的含义了,所以第一条命令就是把命令的错误信息重定向到一个空设备中,即丢弃此信息,第二条就是把标准输出重定向到空设备中,最后一条是把标准输出(默认)重定向到空设备,同时把错误信息定向到标准输出中,当然可以这么写
command 1>/dev/null 2>&1
增加的列位于最后
alter table table_name add col_name varchar(20);
alter table table_name add col_name varchar(20) default 'test' not null;
alter table table_name add column col_name varchar(20) default 'test' not null;
增加的列在指定的列之后
alter table table_name add col_name varchar(20) after exists_col_name;
增加的列位于第一列
alter table table_name add col_name varchar(20) first;
修改列的类型
alter table table_name modify col_name varchar(40); //假设原来的类型是varchar(20)
alter table table_name modify col_name int(11); //从varchar修改为int
alter table table_name change col_name col_name varchar(20); //从int修改为varchar
修改列名
alter table table_name change old_col_name new_col_name varchar(20);
alter table table_name drop col_name;
alter table table_name drop column col_name;
freemarker的list指令遍历一个list集合中的每一个元素,例如:
<#list userLists as user>
${user.name}
...
</#list>
其实list指令还隐含了两个变量,
1、item_index 该变量将返回元素在集合里的索引值,从0开始计数;
2、item_has_next 该变量是boolean型,false表明该元素是Sequences里的最后一个元素。
上述例子中如果需要把序号打印出来,使用${user_index}即可,同时如果想判断是否是最后一个元素,使用 user_has_next就行了。
grep算是一个用的比较多的命令吧,很多时候grep都是配合其他命令一起使用,例如查看系统进程是否有某个进程,就可以用
ps aux | grep xxx
如果系统存在该进程,就会被显示出来,不过不管有没有xxx,都会打印出含有”grep xxx”一行,有时候不细心,以为存在xxx进程,要是不想看到这个行,可以这样
ps aux | grep xxx | grep -v grep
每次执行都这样可能会觉得有点麻烦,那也可以使用alias的方式,来个一劳永逸,把下面命令
alias grep=”grep -v grep | grep”
加到/etc/bashrc或用户更目录下的.bashrc文件中即可。
MySql服务器端本身可以通过配置以日志的方式记录下来那些耗时的sql语句,对给系统调优提供一些参考信息,同样java的jdbc Driver也支持这样的功能,只需要在jdbc中增加logSlowQueries和配置即可slowQueryThresholdMillis,其中logSlowQueries参数设置是否打印出慢sql,slowQueryThresholdMillis定义一个时间,单位是毫秒,超过这个时间的就是慢sql,也就会打印出来。例如jdbc配置如下:
jdbc:mysql://localhost:3306/database_name?autoReconnect=true&useUnicode=true&characterEncoding=utf8
&logSlowQueries=true&slowQueryThresholdMillis=0
对单表执行更新没有什么好说的,无非就是update table_name set col1 = xx,col2 = yy where col = zz,主要就是where条件的设置。有时候更新某个表可能会涉及到多张数据表,例如:
update table_1 set score = score + 5 where uid in (select uid from table_2 where sid = 10);
其实update也可以用到left join、inner join来进行关联,可能执行效率更高,把上面的sql替换成join的方式如下:
update table_1 t1 inner join table_2 t2 on t1.uid = t2.uid set score = score + 5 where t2.sid = 10;