`
hudeyong926
  • 浏览: 2018122 次
  • 来自: 武汉
社区版块
存档分类
最新评论

PHP memcache memcached

阅读更多

1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的。与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些,目前只有Linux版本
2.Memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached,只支持OO接口。
3.memcached还有个非常称赞的地方,就是flag不是在操作的时候设置了,而是有了一个统一的setOption()。Memcached实现了更多的memcached协议。
4.memcached支持Binary Protocol,而memcache不支持。这意味着memcached会有更高的性能。不过memcached目前还不支持长连接。

 

memcached是一个高性能的分布式的内存对象缓存系统,它能够用来存储各种

格式的数据,包括图像、视频、文件以及数据库检索的结果等


 
使用 Memcache d的网站一般流量都是比较大的,为了缓解数据库的压力,让 Memcache d作为一个缓存区域,把部分信息保存在内存中,在前端能

 

够迅速的进行存取。

  Memcached服务器端的安装 (此处将其作为系统服务安装)
win32 binary: memcached-win32-bin.zip下载地址:http://code.jellycan.com/memcached/

1 解压缩文件到

c:\memcached

2 命令行输入

C:\memcached\memcached.exe -d install

NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
3 命令行输入

C:\memcached\memcached.exe -d start

该命令启动 Memcached ,默认监听端口为 11211,通过 memcached.exe -h 可以查看其帮助

 

命令行下测试

4、 telnet 127.0.0.1 11211   (使用telnet连接测试是否成功)

5、 输入:stats 命令查看基本信息, 然后在命令行中输入netstat -n -a 可以查看端口 

 

memcache服务器安全:

Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄 露被其他无关人员查看,重则服务器被入侵,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这些都是我们未知的,所以危险性是可以预见的。 为了安全起见,做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。

现在就关于修改memcache服务器配置的问题说明如下:

1>用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务器放在192.168.1.55的服务器上

2>修改端口,如改为11200

3>分配内存,如分配1024M(1G内存)

方法如下:

 

1>开始>运行:CMD(确定)

2>cd C:\memcached(回车)

3>memcached -m 1024 -p 11200 -l 192.168.1.55(回车)

注意,此时命令行不会回到C:\memcached>状态,并且实际上memcache服务器悄悄变为stop状态了。此窗口不可以关闭。新开一个cmd窗口

4>开始>运行:CMD(确定)

5>cd C:\memcached(回车)

6>memcached -d start(回车)可以关闭此cmd窗口。

此时可以使用新配置的memcache服务器了。

 

上述方法虽然解决了修改默认配置的问题,但是始终会有一个cmd窗口不可以关闭,否则就回到11211端口的默认配置。

更好的解决方案是通过修改服务的注册表配置:

1>开始>运行:regedit(回车)

2>在注册表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server

3>默认的ImagePath键的值是:"c:\memcached\memcached.exe" -d runservice,改为:"c:\memcached\memcached.exe" -d runservice -m 512 -p  11200 -l 192.168.1.55(确定,关闭注册表)

4>我的电脑(右键)>管理>服务 找到memcache的服务,重新启动一次即可生效。

此时,同网段内的电脑仍然可以利用这台memcache服务器,我们限定指定的web应用服务器才能够使用,通过防火墙的方式。如只允许 192.168.1.2这台Web服务器对Memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这 个可以根据自己的需要来做。

 

二PHP中配置 Memcachd Client端

这里我们为了连接memcached server 我们需要php_memcache.dll

PHP membercached 扩展下载地址:http://downloads.php.net/pierre/

方法1  

1、下载: php_memcache.dll 组件 (WAMP自带了) 请自己查找对应的php版本的文件

2、复制 php_memcache.dll 到指定的组件目录, 默认在 php\ext\

3、在PHP.ini 加入一句话: extension=php_memcache.dll  

4、重启WEB服务,使用 phpinfo() 函数查看启用情况 如果有memcache,那么就说明安装成功!

php测试

<?php
$memcache = new Memcache();  //windows
$memcache->connect('127.0.0.1', 11211 ) or die ( "Could not connect Memcached server!" );  
$memcache->set( 'Memcache', "hello Memcache!<br/>");
echo $memcache->get('Memcache');
?>

结果hello Memcache!

恭喜你,配置成功了,现在开始慢慢捣鼓吧!不能运行看配置是否成功,或者检查下端口是否开放

<?php
$memcache = new Memcached();  //linux
$memcache->addServer('127.0.0.1', 11211 ) or die ( "Could not connect Memcached server!" );  
$memcache->set( 'Memcached', "hello Memcached!<br/>");
echo $memcache->get('Memcached');
?>

下面是一段简单的测试代码,代码中对标识符为 'mykey' 的对象数据进行存取操作:

<?php
//   包含 memcached 类文件
require_once('memcached-client.php');
//   选项设置
$options = array(
    'servers' => array('192.168.1.1:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务
    'debug' => true,  //是否打开 debug
    'compress_threshold' => 10240,  //超过多少字节的数据时进行压缩
    'persistant' => false  //是否使用持久连接
    );
//   创建 memcached 对象实例
$mc = new memcached($options);
//   设置此脚本使用的唯一标识符
$key = 'mykey';
//   往 memcached 中写入对象
$mc->add($key, 'some random strings');
$val = $mc->get($key);
echo "n".str_pad('$mc->add() ', 60, '_')."n";
var_dump($val);
//   替换已写入的对象数据值
$mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));
$val = $mc->get($key);
echo "n".str_pad('$mc->replace() ', 60, '_')."n";
var_dump($val);
//   删除 memcached 中的对象
$mc->delete($key);
$val = $mc->get($key);
echo "n".str_pad('$mc->delete() ', 60, '_')."n";
var_dump($val);
?>

 是不是很简单,在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached 中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符 key 。下边是一个利用 memcached 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):

<?php
$sql = 'SELECT * FROM users';
$mc = new Memcache; 
$mc->pconnect('127.0.0.1', 11211);  
$key = md5($sql);   //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
    //   在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
    echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
    $conn = mysql_connect('localhost', 'test', 'test');
    mysql_select_db('test');
    $result = mysql_query($sql);
     while ($row = mysql_fetch_object($result))
        $datas[] = $row;
    //   将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
    $mc->add($key, $datas);
} else {
     echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
}
var_dump($datas);
?>

可以看出,使用 memcached 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。

 

php的扩展memcache,不支持cas,所以我们要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcached

二、安装libmemcached

[root@vm15 local]# tar zxvf libmemcached-1.0.18.tar.gz 
[root@vm15 local]# cd libmemcached-1.0.18
[root@vm15 libmemcached-1.0.18]# ./configure --prefix=/usr/local/libmemcached --with-memcached
[root@vm15 libmemcached-1.0.18]# make
[root@vm15 libmemcached-1.0.18]# make install

 安装memcached扩展

# tar -zxvf memcached-2.2.0.tgz
# cd memcached-2.2.0
# /usr/local/php/bin/phpize
#./configure --enable-memcached --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-json --enable-memcached-igbinary --enable-memcached-msgpack --enable-memcached-protocol --disable-memcahed-sasl
# make && make install

 

  • 大小: 18.9 KB
  • 大小: 10 KB
  • 大小: 45.5 KB
  • 大小: 6.1 KB
分享到:
评论
2 楼 hudeyong926 2013-07-09  
memcached只能Linux下面装,window不支持,我弄个memcached截图怎么了,文章中都是说的memcache window的方法,我弄截图是方面我自己用
1 楼 112183883 2013-07-08  
一个php_memcache.dll可以同时装载php_memcache和php_memcached两个扩展,晕,不要误导别人好不好。你这图截的也太假了,一看字体就知道是linux下的截图,这样搞有意思么?虚心点不好么,非要装。。

相关推荐

Global site tag (gtag.js) - Google Analytics