最新消息:其实接手服务器,最最最重要的还是要看下数据库、文件备份情况!!!非常重要!!!

memcached编译安装及缓存mysql测试

application shang 2521浏览 0评论

说明:
客户端第一次访问应用程序时,会到数据库(RDBMS类型)中取出数据,返回给客户端;同时也将取出的数据保存到memcached中。
第二次访问时,因为数据已经缓存,不用去数据库查询,直接从memcached取。
本文包括memcached的编译安装及测试memcached缓存mysql的情况。

实现:
1.编译安装memcaced

# yum install libevent libevent-devel -y  //memcached是基于libevent的事件处理,因此需要安装libevent
# cd /usr/local/src
# wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
# tar -xvzf  memcached-1.4.5.tar.gz
# cd memcached-1.4.5
# ./configure --prefix=/usr/local/memcached
# make && make install

 
2.开启memcached守护进程

# /usr/local/memcached/bin/memcached -d -m 64 -u root -l 192.168.6.191 -p 11211 -c 64 -P /tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里使用默认端口11211,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

 
3.新建mysql数据库test,及表personal_info,用于测试

# /usr/local/mysql/bin/mysql -uroot -p
> create database test;  //创建测试数据库test,创建空数据表personal_info
> CREATE TABLE `personal_info` (
`pi_id` bigint(20) NOT NULL auto_increment,
`pi_name` varchar(50) NOT NULL,
`pi_tel` varchar(15) default NULL,
`pi_qq` varchar(15) default NULL,
`pi_email` varchar(50) default NULL,
PRIMARY KEY (`pi_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
> INSERT INTO `mydb`.`personal_info` (`pi_id`,`pi_name` ,`pi_tel` ,`pi_qq` ,`pi_email`)
VALUES ('1', 'eric', '13611031222', '55555555', 'eric@nginxs.com');  //插入数据

 
4.在站点目录下新建mysql-memcache.php,用于显示是从memcached读数据,还是从mysql读数据

# cat /home/www/mysql-memcache.php //内容如下
<?php
$memcachehost = '127.0.0.1';
$memcacheport = 11211;
$memcachelife = 60;
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
$query="select * from personal_info limit 10";
$key=md5($query);
if(!$memcache->get($key))
{
        $conn=mysql_connect("localhost","root","yourpasswd");
        mysql_select_db(test);
        $result=mysql_query($query);
        while ($row=mysql_fetch_assoc($result))
        {
            $arr[]=$row;
        }
        $f = 'mysql';
        $memcache->add($key,serialize($arr),0,30);    //mysql查询后,插入memcached
        $data = $arr ;
}
else{
    $f = 'memcache';
    $data_mem=$memcache->get($key);
    $data = unserialize($data_mem);
}
echo $f;
echo "<br />";
//print_r($data);
foreach($data as $a)
{
        echo "number is <b><font color=#FF0000>$a[pi_id]</font></b>";
        echo "name is <b><font color=#FF0000>$a[pi_name]</font></b>";
        echo "tel is <b><font color=#FF0000>$a[pi_tel]</font></b>";
        echo "qq is <b><font color=#FF0000>$a[pi_qq]</font></b>";
        echo "email is <b><font color=#FF0000>$a[pi_email]</font></b>";
}
?>

 
测试:
第一次访问会提示mysql

后面访问,就会提示memcache


附录:
附录1.memcached高效的原因
那么memcached的快速和高效率是如何体现出来的呢?我们都清楚,RDBMS是文件型的数据库,最终还是以文件的形式保存在磁盘上。而memcached则不一样,它是key:value关系型的数据库,是保存在内存中。内存的读写速度要比磁盘的读写速度快得多,前者是后者的10的6次方倍。

附录2.libevent简单说明
libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。 memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。

转载请注明:酷喃|coolnull| » memcached编译安装及缓存mysql测试

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址