继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

关于memcache 测试

largeQ
关注TA
已关注
手记 953
粉丝 92
获赞 585


我之前一直是听人说,自己没有搞过,这些日子天天看美女图片了。

今天才看了看memcache.所以很希望得到批评。^_^

简单的说下memcache.

在此之前,建议大家读一下这篇文章,很有意思。

[url]http://www.socialtext.net/memcached/index.cgi?this_is_a_story_of_caching[/url]

至于原理以及启动的参数我就不多描述了,memcached -h 就有了或者GOOGLE一下一大堆。

我说明一下她的分布式应用。

可以有N多memcached 服务分别装在不同的服务器上。然后按照自己的算法缓存数据库的数据到每个memcached服务器上。

当然MySQL的Federated引擎也可以做为分布式应用。

她俩有以下优缺点:

1. Federated 获取的数据是实时的,而Memcache非实时数据。

2. Memcache 的速度是没得说,因为她完全是放在内存里面进行的,而且不需要SQL解析。Federated 则不行。

唉,只可惜我现在没有条件测试。而且我画的图比较恶心,所以暂时省略掉了。^_______^

1.下面来安装Memcache 服务器端.

所需软件:libevent

下载地址:[url]http://www.monkey.org/~provos/libevent-1.4.8-stable.tar.gz[/url]

memcached

下载地址:[url]http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz[/url]

编译安装: 

1.先编译libevent.

./configure --prefix=/usr/local/libevent;make;make install;

2.再编译memcached.

./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent --enable-threads

make

make install;

由于之前系统自动安装了libevent.我想挂载我编译的libevent.

[root@localhost x]# cp /usr/local/libevent/lib/libevent-1.4.so.2.1.2

[root@localhost x]# ln -s libevent-1.4.so.2.1.2 libevent-1.4.so.2

再加一个用户.

useradd memcached.(你可以给你的这个用户设置密码等。)

之后就可以启动memcached了。

/usr/local/memcached/bin/memcached -umemcached -d start -m 120MB

2. 搞个PHP的memcache扩展来简单用一下。

由于我的PHP在本机的XP上。所以非常的简单。直接下载DLL,然后修改php.ini.

下载地址:[url]http://pecl4win.php.net/ext.php/php_memcache.dll[/url] 根据你的PHP版本下载。

这里是所有的memcache 函数列表。

[url]http://cn2.php.net/manual/en/ref.memcache.php[/url]

来做个测试。

先搞个表:

create table t(id char(36) not null primary key, username varchar(20) not null);

插点数据:

insert into t values (uuid(),'Livia'),(uuid(),'Lucy'),(uuid(),'Sivia'),(uuid(),'david');

写个简单脚本测试一下。

<?php

$host = '192.168.1.21:3306';

$user = 'webuser';

$passwd = '123456';

$db = 'test';

$conn = mysql_connect($host,$user,$passwd);

mysql_select_db($db,$conn);

$sql = 'select * from t order by id desc';

$result = mysql_query($sql,$conn);

while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){

    $test_key[] = $row;

}

$sql = md5($sql);

$mem = new Memcache;

$mem->connect("192.168.1.21", 11211);

$mem->set($sql,$test_key, MEMCACHE_COMPRESSED, 600);

print_r($mem->get($sql));

?>

看看结果出来了。

C:\>php -f "d:/lamp/web2/phpinfo.php"

Array

(

    [0] => Array

        (

            [id] => d8f1ec2a-c033-11dd-bd1a-002215c94322

            [username] => david

        )

    [1] => Array

        (

            [id] => d8f1eb9e-c033-11dd-bd1a-002215c94322

            [username] => Sivia

        )

    [2] => Array

        (

            [id] => d8f1ea9a-c033-11dd-bd1a-002215c94322

            [username] => Lucy

        )

    [3] => Array

        (

            [id] => d8f1e658-c033-11dd-bd1a-002215c94322

            [username] => Livia

        )

)

3.关于memcache的监控。

本机监控的话,可以直接TELNET上去。

以下命令以及详细用法说明在手册上可以见到。

[url]http://dev.mysql.com/doc/refman/5.1/en/ha-memcached-stats.html[/url]

[root@localhost x]# telnet localhost 11211

Trying 192.168.4.41...

Connected to localhost.

Escape character is '^]'.

stats

STAT pid 25247

STAT uptime 223

STAT time 1228377146

STAT version 1.2.6

STAT pointer_size 32

STAT rusage_user 0.010998

STAT rusage_system 0.029995

STAT curr_items 1

STAT total_items 1

STAT bytes 218

STAT curr_connections 5

STAT total_connections 90

STAT connection_structures 6

STAT cmd_get 1

STAT cmd_set 1

STAT get_hits 1

STAT get_misses 0

STAT evictions 0

STAT bytes_read 853

STAT bytes_written 39101

STAT limit_maxbytes 209715200

STAT threads 4

END

stats items

STAT items:5:number 1

STAT items:5:age 204

STAT items:5:evicted 0

STAT items:5:outofmemory 0

END

stats slabs

STAT 5:chunk_size 232

STAT 5:chunks_per_page 4519

STAT 5:total_pages 1

STAT 5:total_chunks 4519

STAT 5:used_chunks 4519

STAT 5:free_chunks 0

STAT 5:free_chunks_end 4518

STAT active_slabs 1

STAT total_malloced 1048408

END

不过这个好像不是实时的。

实时的话简单的PHP脚本加上WATCH就可以了。

<?php

$mem = new Memcache;

$mem->connect("192.168.4.41", 11211);

print_r($mem->getstats());

// 关于更加详细的可以自己加。

?>

[root@localhost ~]# /usr/local/php/bin/php -f watch_memcache.php 

Array

(

    [pid] => 25247

    [uptime] => 708

    [time] => 1228377631

    [version] => 1.2.6

    [pointer_size] => 32

    [rusage_user] => 0.010998

    [rusage_system] => 0.030995

    [curr_items] => 1

    [total_items] => 1

    [bytes] => 218

    [curr_connections] => 5

    [total_connections] => 93

    [connection_structures] => 7

    [cmd_get] => 1

    [cmd_set] => 1

    [get_hits] => 1

    [get_misses] => 0

    [evictions] => 0

    [bytes_read] => 923

    [bytes_written] => 40873

    [limit_maxbytes] => 209715200

    [threads] => 4

)

用WATCH来实时运行它。

[root@localhost ~]# watch "/usr/local/php/bin/php -f watch_memcache.php"

以下是一些非常有用的资源:

FAQ。

[url]http://www.socialtext.net/memcached/index.cgi?faq[/url]

memcache 基础教程。

[url]http://www.ccvita.com/259.html[/url]

memcache 协议。

[url]http://www.ccvita.com/306.html[/url]

Discuz 的 memcache 缓存实现。

[url]http://www.ccvita.com/261.html[/url]

Linux Memcache 安装。

[url]http://www.ccvita.com/257.html[/url]

windows 下的php libmemcache 扩展安装

[url]http://pecl4win.php.net/list.php[/url]

libmemcached.

[url]http://download.tangent.org/libmemcached-0.25.tar.gz[/url]

©著作权归作者所有:来自51CTO博客作者david_yeung的原创作品,如需转载,请注明出处,否则将追究法律责任

phpmysql休闲MySQL性能优化


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP