memcached
安装
+php
使用手记
本文简要介绍一下安装的情况,以及PHP模块memcache使用情况:
提要:
1。安装 memcached 服务器端
2。安装 php 对 memcache 支持模块
3。使用 memcache 情况,计数器、数据压缩
4。 Memcache 内存的更新清理 (delete flush)
5。内存超量的测试 (set)
1。安装 memcached 服务器端
2。安装 php 对 memcache 支持模块
3。使用 memcache 情况,计数器、数据压缩
4。 Memcache 内存的更新清理 (delete flush)
5。内存超量的测试 (set)
注意的是:如果你安装过程中出现错误,请看看是不是有模块没装:
autoconf
zlib ( 压缩数据用 )
2。安装 php 对 memcache 支持模块
PHP 老家:
http://cn.php.net/manual/zh/ref.memcache.php
(PHP 4.3.3 or newer is required to use the memcache extension. 难道, 4.3.3 都装上了吗?好像没有吧,用 4.4.4 好像都要另外装的 )
3。使用 memcache 情况,计数器、数据压缩
使用情况一:统计
autoconf
zlib ( 压缩数据用 )
2。安装 php 对 memcache 支持模块
PHP 老家:
http://cn.php.net/manual/zh/ref.memcache.php
(PHP 4.3.3 or newer is required to use the memcache extension. 难道, 4.3.3 都装上了吗?好像没有吧,用 4.4.4 好像都要另外装的 )
3。使用 memcache 情况,计数器、数据压缩
使用情况一:统计
<?php
// 访问统计
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
if ( $s = $memcache ->get(’a’)) {
$s = $s +1;
$memcache ->set(’a’, $s );
}
else
$memcache ->set(’a’,1);
echo ’ 访问结果为: ’. $s ;
?>
// 访问统计
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
if ( $s = $memcache ->get(’a’)) {
$s = $s +1;
$memcache ->set(’a’, $s );
}
else
$memcache ->set(’a’,1);
echo ’ 访问结果为: ’. $s ;
?>
其实我们可以用
increment
方法代替上面的做法
<?php
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
if ( $s = $memcache ->increment(’a’,1)) {
echo $s ;
}
else
$memcache ->set(’a’,1);
?>
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
if ( $s = $memcache ->increment(’a’,1)) {
echo $s ;
}
else
$memcache ->set(’a’,1);
?>
数据压缩
:
<?php
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
$test =( str_repeat (’jetwong’,100000));
$memcache ->set(’b’,( $test ));
?>
使用压缩:
<?php
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
$test =( str_repeat (’jetwong’,100000));
$memcache ->set(’b’,( $test ),MEMCACHE_COMPRESSED);
?>
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
$test =( str_repeat (’jetwong’,100000));
$memcache ->set(’b’,( $test ));
?>
使用压缩:
<?php
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
$test =( str_repeat (’jetwong’,100000));
$memcache ->set(’b’,( $test ),MEMCACHE_COMPRESSED);
?>
使用情况说明:
前台比较
|
目前内存
bytes |
总共读取
bytes_read |
总共写入
bytes_written |
压缩前
|
700085
|
700081
|
416
|
压缩后
|
1131
|
1125
|
13
|
可能看到压缩后明显占用内存少了不少
4。
Memcache
内存的更新清理
(delete flush)
<?php
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
/* 设置值 */
$status = $memcache ->getStats();
echo ’ 设置前内存使用情况 ’. $status [’bytes’].’<br>’;
echo ’ 设置后 ’;
for ( $i =0; $i <9; $i ++) {
$memcache ->set(’b’. $i , rand (1,99));
echo ’<br>’. $i .’->’. $memcache ->get(’b’. $i );
}
/* 查看设置的值 */
$status = $memcache ->getStats();
echo ’delete 前内存使用情况 ’. $status [’bytes’].’<br>’;
echo ’<br> 开始 delete’;
for ( $i =0; $i <9; $i ++) {
$memcache ->delete(’b’. $i );
echo ’<br>’. $i .’->’. $memcache ->get(’b’. $i );
}
/* 查看 flush 使用的情况 */
$status = $memcache ->getStats();
echo ’ 使用 flush 前内存使用情况 ’. $status [’bytes’].’<br>’;
echo ’ 使用 flush 情况: ’;
for ( $i =0; $i <9; $i ++) {
$memcache ->set(’b’. $i , rand (1,99));
echo ’<br>’. $i .’->’. $memcache ->get(’b’. $i );
}
$memcache -> flush ();
echo ’flush 之后: ’;
for ( $i =0; $i <9; $i ++) {
echo ’<br>’. $i .’->’. $memcache ->get(’b’. $i );
}
$status = $memcache ->getStats();
echo ’flush 后内存使用情况 ’. $status [’bytes’].’<br>’;
?>
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
/* 设置值 */
$status = $memcache ->getStats();
echo ’ 设置前内存使用情况 ’. $status [’bytes’].’<br>’;
echo ’ 设置后 ’;
for ( $i =0; $i <9; $i ++) {
$memcache ->set(’b’. $i , rand (1,99));
echo ’<br>’. $i .’->’. $memcache ->get(’b’. $i );
}
/* 查看设置的值 */
$status = $memcache ->getStats();
echo ’delete 前内存使用情况 ’. $status [’bytes’].’<br>’;
echo ’<br> 开始 delete’;
for ( $i =0; $i <9; $i ++) {
$memcache ->delete(’b’. $i );
echo ’<br>’. $i .’->’. $memcache ->get(’b’. $i );
}
/* 查看 flush 使用的情况 */
$status = $memcache ->getStats();
echo ’ 使用 flush 前内存使用情况 ’. $status [’bytes’].’<br>’;
echo ’ 使用 flush 情况: ’;
for ( $i =0; $i <9; $i ++) {
$memcache ->set(’b’. $i , rand (1,99));
echo ’<br>’. $i .’->’. $memcache ->get(’b’. $i );
}
$memcache -> flush ();
echo ’flush 之后: ’;
for ( $i =0; $i <9; $i ++) {
echo ’<br>’. $i .’->’. $memcache ->get(’b’. $i );
}
$status = $memcache ->getStats();
echo ’flush 后内存使用情况 ’. $status [’bytes’].’<br>’;
?>
5。内存超量的测试
(set)
我们把内存设为2M
./memcached -d -m 2 -p 11211 -u root
<?php
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
//600K 左右
$test1 = str_repeat (’jetlee’,100000);
//600K 左右
$test2 = str_repeat (’jetlee’,100000);
//600K 左右
$test3 = str_repeat (’ 李连杰 ’,200000);
//600K 左右
$test4 = str_repeat (’ 连杰李 ’,100000);
//200K
$test5 = file_get_contents (’http://img.pconline.com.cn/images/photoblog/2988177/20068/4/1154688770042_mthumb.JPG’);
$test6 = file_get_contents (’http://img.pconline.com.cn/images/photoblog/1767557/20069/28/1159417108902_mthumb.jpg’);
for ( $i =1; $i <=6; $i ++) {
$j =’test’. $i ;
if ( $memcache ->set( $j ,$ $j )) {
echo $j .’-> 设置成功 <br>’;
$status = $memcache ->getStats();
echo ’ 内存 :’. $status [’bytes’].’<br>’;
}
else {
echo $j .’-> 设置失败 <br>’;
}
}
?>
$memcache = new Memcache;
$memcache ->connect(’localhost’, 11211) or die ("Could not connect");
//600K 左右
$test1 = str_repeat (’jetlee’,100000);
//600K 左右
$test2 = str_repeat (’jetlee’,100000);
//600K 左右
$test3 = str_repeat (’ 李连杰 ’,200000);
//600K 左右
$test4 = str_repeat (’ 连杰李 ’,100000);
//200K
$test5 = file_get_contents (’http://img.pconline.com.cn/images/photoblog/2988177/20068/4/1154688770042_mthumb.JPG’);
$test6 = file_get_contents (’http://img.pconline.com.cn/images/photoblog/1767557/20069/28/1159417108902_mthumb.jpg’);
for ( $i =1; $i <=6; $i ++) {
$j =’test’. $i ;
if ( $memcache ->set( $j ,$ $j )) {
echo $j .’-> 设置成功 <br>’;
$status = $memcache ->getStats();
echo ’ 内存 :’. $status [’bytes’].’<br>’;
}
else {
echo $j .’-> 设置失败 <br>’;
}
}
?>
执行结果:
test1->设置成功
内存:600042
test2->设置成功
内存:1200084
test3->设置失败
test4->设置成功
内存:1200084
test5->设置失败
test6->设置失败
内存:600042
test2->设置成功
内存:1200084
test3->设置失败
test4->设置成功
内存:1200084
test5->设置失败
test6->设置失败
刚好印证我们的计算,不过20万的repeat为什么会失败,不是太了解,,,,,,
总结:
示例:
<?
// 设置篇
if ( $data = $memcache ->get(’k’, $v )) {
// 显示我们的数据
}
else {
$data = get_from_database; // 得到数据源
if (! $memcache ->set(’k’, $data ), MEMCACHE_COMPRESSED) // 开始设置
log (); // 不成功 , 记录失败信息
}
?>
// 设置篇
if ( $data = $memcache ->get(’k’, $v )) {
// 显示我们的数据
}
else {
$data = get_from_database; // 得到数据源
if (! $memcache ->set(’k’, $data ), MEMCACHE_COMPRESSED) // 开始设置
log (); // 不成功 , 记录失败信息
}
?>
-----------OVER-----------