淡定在黑暗和黎明时分!!!
linux服务器历险之使用memcached
一,为什么要使用memcached
最优秀的cache软件,有效减轻数据库服务器的压力
不用它还要用哪个?
二,下载
从何处下载?
http://www.danga.com/memcached/
libevent从何处下载?
http://rpmforge.net/user/packages/libevent/
客户端php的memcache模块(python,java等需要哪个可以自行下载)下载,这里为PHP客户端为实例:
http://pecl.php.net/package/memcache/download/
三,如何进行安装libevent?
首先就是先下下载rpm包:
wget http://apt.sw.be/redhat/el4/en/i386/RPMS.dag/libevent-1.1a-1.2.el4.rf.i386.rpm
wget http://apt.sw.be/redhat/el4/en/i386/RPMS.dag/libevent-devel-1.1a-1.2.el4.rf.i386.rpm
rpm -ivh libevent-1.1a-1.2.el4.rf.i386.rpm
rpm -ivh libevent-devel-1.1a-1.2.el4.rf.i386.rpm
四,检查libevent安装是否成功?
[root@datam libevent-1.3e]# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 22 Oct 6 00:20 libevent-1.1a.so.1 -> libevent-1.1a.so.1.0.2
-rwxr-xr-x 1 root root 31596 Jan 7 2007 libevent-1.1a.so.1.0.2
lrwxrwxrwx 1 root root 22 Oct 6 00:36 libevent-1.3e.so.1 -> libevent-1.3e.so.1.0.3
-rwxr-xr-x 1 root root 338439 Oct 6 00:36 libevent-1.3e.so.1.0.3
-rw-r–r– 1 root root 533978 Oct 6 00:36 libevent.a
-rwxr-xr-x 1 root root 828 Oct 6 00:36 libevent.la
lrwxrwxrwx 1 root root 22 Oct 6 00:36 libevent.so -> libevent-1.3e.so.1.0.3
五,安装memcached
tar -zxvf memcached-1.2.2.tar.gz
安装memcached时,需要指定libevent的安装位置:
./configure –prefix=/usr/local/memcache
# make
# make install
六,检查memcached安装是否成功?
1看文件
[root@datam memcached-1.2.2]# ls -al /usr/local/memcache/bin/mem*
-rwxr-xr-x 1 root root 141771 Oct 6 00:41 /usr/local/memcache/bin/memcached
-rwxr-xr-x 1 root root 151317 Oct 6 00:41 /usr/local/memcache/bin/memcached-debug
2,测试运行
[root@datam memcached-1.2.2]# /usr/local/bin/memcached -h
/usr/local/bin/memcached: error while loading shared libraries: libevent-1.3e.so.1: cannot open shared object file: No such file or directory
出错了,怎么办?
进行检查
[root@datam memcached-1.2.2]# LD_DEBUG=libs memcached -v
4962: find library=libevent-1.3e.so.1 [0]; searching
4962: search cache=/etc/ld.so.cache
4962: search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64 (system search path)
4962: trying file=/lib64/tls/x86_64/libevent-1.3e.so.1
4962: trying file=/lib64/tls/libevent-1.3e.so.1
4962: trying file=/lib64/x86_64/libevent-1.3e.so.1
4962: trying file=/lib64/libevent-1.3e.so.1
4962: trying file=/usr/lib64/tls/x86_64/libevent-1.3e.so.1
4962: trying file=/usr/lib64/tls/libevent-1.3e.so.1
4962: trying file=/usr/lib64/x86_64/libevent-1.3e.so.1
4962: trying file=/usr/lib64/libevent-1.3e.so.1
4962:
memcached: error while loading shared libraries: libevent-1.3e.so.1: cannot open shared object file: No such file or directory
进行处理:
[root@datam memcached-1.2.2]# ln -s /usr/lib/libevent-1.3e.so.1 /usr/lib64/libevent-1.3e.so.1
[root@datam memcached-1.2.2]# memcached -h
memcached 1.2.2
-p <num> TCP port number to listen on (default: 11211)
-U <num> UDP port number to listen on (default: 0, off)
-s <file> unix socket path to listen on (disables network support)
-l <ip_addr> interface to listen on, default is INDRR_ANY
-d run as a daemon
-r maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num> max memory to use for items in megabytes, default is 64 MB
-M return error on memory exhausted (rather than removing items)
-c <num> max simultaneous connections, default is 1024
-k lock down all paged memory
-v verbose (print errors/warnings while in event loop)
-vv very verbose (also print client commands/reponses)
-h print this help and exit
-i print memcached and libevent license
-b run a managed instanced (mnemonic: buckets)
-P <file> save PID in <file>, only used with -d option
-f <factor> chunk size growth factor, default 1.25
-n <bytes> minimum space allocated for key+value+flags, default 48
至此安装完毕
七,如何启动memcached的服务端?
下面,我们来启动一个Memcached的服务器端:
# /usr/local/memcache/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -m 128 -l localhost -p 11211 -u root
-d 以守护程序(daemon)方式运行 memcached;
-m 设置 memcached 可以使用的内存大小,单位为 M;
-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;
-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;
-u 指定用户;
-t <num> number of threads to use, default 4
如果有此项,说明已经支持了线程,就可以在启动的时候使用 -t 选项来启动多线程
然后启动的时候必须加上你需要支持的线程数量:
/usr/local/memcache/bin/memcached -t 1024
[root@datam memcached-1.2.2]# /usr/local/bin/memcached -d -m 128 -l localhost -p 11211 -u root
Illegal address: localhost
[root@datam memcached-1.2.2]# /usr/local/memcache/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u root
[root@datam memcached-1.2.2]#
至此启动成功
八,memcached的相关知识?
如何停止?如何重启?如何刷新其内容?等等
使用这个文件来实现:
#! /bin/sh
#
# chkconfig: - 55 45
# description: The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/memcached
# Source function library.
. /etc/rc.d/init.d/functions
PORT1=11211
USER=nobody
MAXCONN=1024
CACHESIZE=64
OPTIONS=”-t 8″
MEMDAEMON=/usr/local/memcache/bin/memcached
if [ -f /etc/sysconfig/memcached ];then
. /etc/sysconfig/memcached
fi
# Check that networking is up.
if [ "$NETWORKING" = "no" ]
then
exit 0
fi
RETVAL=0
prog=”memcached”
start () {
echo -n $”Starting $prog: ”
# insure that /var/run/memcached has proper permissions
# chown $USER /var/run/memcached
daemon $MEMDAEMON -d -p $PORT1 -u $USER -m $CACHESIZE -c $MAXCONN $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}
stop () {
echo -n $”Stopping $prog: ”
killproc memcached
RETVAL=$?
echo
if [ $RETVAL -eq 0 ] ; then
rm -f /var/lock/subsys/memcached
rm -f /var/run/memcached.pid
fi
}
restart () {
stop
start
}
# See how we were called.
case “$1″ in
start)
start
;;
stop)
stop
;;
status)
status memcached
;;
restart|reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/memcached ] && restart || :
;;
*)
echo $”Usage: $0 {start|stop|status|restart|reload|condrestart}”
exit 1
esac
exit $?
九:配置php能访问memcached
wget http://pecl.php.net/get/memcache-2.2.0.tgz
tar -zxvf memcache-2.2.0.tgz
[root@datam memcache-2.2.0]# /usr/local/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20050922
Zend Extension Api No: 220051025
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.
没有autoconf
yum install autoconf
[root@datam memcache-2.2.0]# yum install autoconf
[root@datam memcache-2.2.0]# /usr/local/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20050922
Zend Extension Api No: 220051025
[root@datam memcache-2.2.0]# ./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir
make
[root@datam memcache-2.2.0]# make install
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20050922/
至此安装成功
下面我们需把此安装成功的模块添加到php中去
vi php.ini
add下面的这两行
extension_dir = “/usr/local/lib/php/extensions/no-debug-non-zts-20050922/”
extension=memcache.so
按照相应路径进行设置这个动态模块
然后重启apache
用phpinfo()看到存在以下信息,则表示模块安装成功
memcache
| memcache support | enabled |
|---|---|
| Active persistent connections | 0 |
| Revision | $Revision: 1.86 $ |
| Directive | Local Value | Master Value |
|---|---|---|
| memcache.allow_failover | 1 | 1 |
| memcache.chunk_size | 8192 | 8192 |
| memcache.default_port | 11211 | 11211 |
| memcache.hash_function | crc32 | crc32 |
| memcache.hash_strategy | standard | standard |
| memcache.max_failover_attempts | 20 | 20 |
十:编写php代码测试访问memcached
[ 接口介绍 ]
服 务器端和客户端都安装配置好了,现在我们就来测试以下我们的成果。Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具 体可以参考PHP手册 “LXXV. Memcache Functions” 这章。我们为了简单方便,就使用面向对象的方式,也便于维护和编写代码。Memcache面向对象的常用接口包括:
Memcache::connect — 打开一个到Memcache的连接
Memcache::pconnect — 打开一个到Memcache的长连接
Memcache::close — 关闭一个Memcache的连接
Memcache::set — 保存数据到Memcache服务器上
Memcache::get — 提取一个保存在Memcache服务器上的数据
Memcache::replace — 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::delete — 从Memcache服务器上删除一个保存的项目
Memcache::flush — 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats — 获取当前Memcache服务器运行的状态
示例程序:
<?php
//连接
$mem = new Memcache;
$mem->connect(“127.0.0.1“, 11211);
//保存数据
$mem->set(‘key1‘, ‘This is first value‘, 0, 60);
$val = $mem->get(‘key1‘);
echo “Get key1 value: “ . $val .“<br>“;
//替换数据
$mem->replace(‘key1‘, ‘This is replace value‘, 0, 60);
$val = $mem->get(‘key1‘);
echo “Get key1 value: “ . $val . “<br>“;
//保存数组
$arr = array(‘aaa‘, ‘bbb‘, ‘ccc‘, ‘ddd‘);
$mem->set(‘key2‘, $arr, 0, 60);
$val2 = $mem->get(‘key2‘);
echo “Get key2 value: “;
print_r($val2);
echo “<br>“;
//删除数据
$mem->delete(‘key1‘);
$val = $mem->get(‘key1‘);
echo “Get key1 value: “ . $val . “<br>“;
//清除所有数据
$mem->flush();
$val2 = $mem->get(‘key2‘);
echo “Get key2 value: “;
print_r($val2);
echo “<br>“;
//关闭连接
$mem->close();
?>
如果正常的话,浏览器将输出:
Get key1 value: This is first value
Get key1 value: This is replace value
Get key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
Get key1 value:
Get key2 value:
十一:测试memcached缓存数据库的查询结果
<?php
/*
测试memcache缓存mysql的查询结果
by hd
2007.10.06
*/
//定义访问数据库的常量
define(SERVER_DATA_HOST,"127.0.0.1");
define(SERVER_DATA_USER,"root");
define(SERVER_DATA_PASS,"");
define(SERVER_DATA_BASE,"liuyan");
//定义访问数据库的常量
define(SERVER_MEM_HOST,”127.0.0.1″);
define(SERVER_MEM_PORT,”11211″);
//建立到数据库的连接
$dblink=mysql_connect(SERVER_DATA_HOST,SERVER_DATA_USER,SERVER_DATA_PASS);
mysql_select_db(SERVER_DATA_BASE,$dblink);
//定义到缓存的链接
$memlink = memcache_connect(SERVER_MEM_HOST,SERVER_MEM_PORT);
//定义访问数据库的函数
function sqlres($sqlstr)
{
global $dblink;
global $memlink;
$memstr = md5($sqlstr);
$memres = array();
if(!$memlink->get($memstr))
{
$dbres = mysql_query($sqlstr,$dblink);
$arrdata=array();
while ($dbrow = mysql_fetch_assoc($dbres))
{
$arrdata[]=$dbrow;
}
$memlink->set($memstr,$arrdata);
}
else
{
$memres = $memlink->get($memstr);
}
return $memres;
}
$sqlstr=”select * from rank”;
$arrdata=sqlres($sqlstr);
print_r($arrdata);
?>
十一:需要注意的问题
十一:封装一个访问memcached的类供调用
| 打印文章 | 这篇文章由数字人于2008年02月26日 2:00 上午发表在编程技巧。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。 |
大约1天前
kettos, vente viagra,
DD, potenzmittel viagra, 14659, acheter cialis, 456624, acheter viager libre, %[, viagra cialis, %))), cialis uk supplier, 59077, cialis form indian pharmacies, vxb, achat cialis, :-]]], buy generic viagra uk kamagra oral jelly, hev, cialis soft tabs online, 8743, comprare viagra senza ricetta, 27237, pilule viagra, fid,
大约1天前
brokker, acheter cialis, %-[[[, comprare viagra italia disfunzione erettile, 12907, viagra frau, 1267, buy viagra in london england, 8)), viagra generique france, 508506, cialis viagra, 5940, acheter viagra cialis, vnersi, cheap generic viagra uk buy, >:))), viagra prezzo, %-],
大约1天前
katte, acheter cialis en france, qzo, free viagra pills uk, :[[[, comprar viagra barata, eap, dove comprare viagra, >:DDD, cialis generika, 701515, kaufen cialis, cddug, cialis 5 mg, 043275, buy viagra side effects uk, >:-DDD, prix du viagra, sgezjm,
大约22小时前
ovriga, online viagra side effects uk, >:PP, achat cialis viagra, yah, comprare viagra toscana, cpsah, acheter viagra generique, wwd, cialis generico, tifab, buy generic viagra online uk sildenafil citrate, >:], cialis soft tabs online,
((, achat viagra paypal, ovy, viagra ou cialis, jfv,
大约22小时前
partecipo, does generic viagra work online uk, >:DDD, cheapest 100 viagra uk,
, cheapest generic viagra uk approved, :]]], buy viagra without prescription london cialis levitra, 423130, achat viagra 12 jours, 8]]], cialis viagra, %-]]], prix cialis, 370, achat cialis france, 04841, cialis versand, wfsv, effetti viagra, %-PP, buy generic cialis uk, 530, buy viagra no prescription uk cialis online, getrru, effetti collaterali cialis, 450235, viagra contraindicaciones, 19065, viagra ou cialis, 8-(,
大约22小时前
jaavi, comprare viagra italia ricetta medica, lzdsv, does generic viagra work online uk, >:-], comprare viagra italia disfunzione erettile, 120, acheter viagra en ligne,
P, viagra generique belgique, pnwox, cheap viagra uk kamagra tablets, =-)), acheter cialis en france, vpup, cialis 5 mg, vff, acheter cialis, ernpm, buy generic viagra uk cialis, 8[[, viagra generico, 69431, cialis form indian pharmacies, 710, effet viagra, %O, buy viagra without pharmacy uk, 727568,
大约22小时前
Lipitor latest News:
lipitor order lipitor on line lipitor repair muscle damage lipitor zocor lipitor changing from lipitor to zocar lipitor lipitor price shopping lipitor news effects lipitor medicine side lipitor online lipitor 10 hs lipitor best generic versions of lipitor lipitor
大约21小时前
szolgalo, acheter cialis en france, =DD, generico viagra, pvqqkh, prix du viagra en pharmacie, =(((, comprar viagra barata, 30966, cheap generic viagra uk, 3248, cialis super active plus, 832, viagra prezzo, 693, pharmacie andorre viagra, 7695, viagra femme, 810302,
大约21小时前
grunn, achat cialis viagra, 8P, generic viagra online uk kamagra tablets,
, kaufen viagra, =PP, buy viagra uk online, 528255, achat viagra belgique effets secondaires, %))), cialis apothekenpreis, whiip, cialis viagra, %[[[, buy viagra without prescription uk, 713, effetti cialis, ffex, buy viagra without prescription london cialis online,
)), comprar viagra sin receta, tmhpbn,
大约21小时前
Lipitor latest News:
News lipitor name of generic lipitor lipitor canada health digest lipitor warning lipitor statin drug lipitor lipitor reducing lipitor dosage lipitor fosamax buy fosamax online login lipitor which is cheaper zocor or lipitor lipitor generic drud for lipitor lipitor
大约20小时前
abcd, generic viagra online uk ajanta pharma, zobuw, comprare viagra login, :-], kaufen cialis, pwt, cialis form indian pharmacies, 91268, cialis ohne rezept, hcan, generic cialis soft online, 8-], ou se procurer du viagra, zhhxks,
大约20小时前
lahjontaa, comprare viagra europa, 750, family viagra online uk, =-]], efectos viagra, =-DD, prix cialis,
, acheter du vrai viagra, zxmvji, cialis 20mg, 835, cheapest generic viagra uk online, jczq, comprare viagra italia cialis online, unbyb, cialis versand, =)), achat cialis, 66104, cialis soft tabs generic, =), viagra senza ricetta, :[, buy generic viagra uk sildenafil citrate, =DD, achat viagra allemagne, 352010, achat viagra france cialis levitra, 06842,
大约19小时前
gader, achat viagra france cialis levitra, 361381, comprare viagra terrenehunsbergeruy visualizza profilo, spb, efectos secundarios viagra, =-]]], potenzmittel viagra, 90014, comprare viagra milano, %-DD, viagra generique france, rrwghe, cheapest generic viagra uk kamagra tablets,
, cialis controindicazioni, hsigx, acheter cialis, cca, cialis generika, wfbf, uk viagra pharmacy, lruo, achat viagra suisse, %-(((, pharmacie viagra, mdhz, viagra cialis generica,
((,
大约19小时前
egito, achat viagra france cialis levitra, %-DDD, viagra france, 8]], low viagra online uk, grj, acheter du vrai viagra, =), buy viagra without prescription in europe, zjf, cheap viagra uk buy cialis online, pdekl, cheap generic viagra uk online pharmacy, 5324, achat viagra europe, 39744, compra viagra italia, 885, cialis uk chemist, ejhjq, femme viagra, 6206, viagra femme, >:D,
大约19小时前
conservacao, viagra donne, =((, viagra sin receta, %(, comprare viagra milano, hzmgs, viagra ou acheter, :[[, cheapest viagra next day delivery uk, 298, cialis uk,
P, cialis senza ricetta, >:]]], acheter cialis en france, >:]]], achat cialis france, >:-D, cialis super viagra, 8[[[, effetti viagra, 8-((, pharmacie andorre viagra, vbfdvd, comprare viagra italia cialis levitra, 31668, cialis sans ordonnance belgique, gep,
大约12小时前
Nexium Latest News:
Nexium news protonix 40 mg or nexium Nexium nexium generic date Nexium esomeprazole generic nexium Nexium buy nexium ambian online Nexium Nexium generic Nexium alternative medication to nexium Nexium buy nexium 40mg Nexium purchase discounted nexium pills Nexium cheapest nexium online
大约10小时前
usingc ativan 926543 buy phentermine 5857 buy rimonabant iuv buy xanax =-))) alendronate sodium %) flagyl 8(( discount phentermine jal diflucan 79553 buy alprazolam
P ultram =-O clonazepam 0481 buy cialis zqbwy buy retin-a ovx clonazepam ahzc buy viagra %-))) terbinafine 4954 buy cialis dvuyc flagyl 00979 sibutramine =-))