PHP MemCached Win インストール
1. 現在、ほとんどの PHP 環境では、d のない memcache バージョンが使用されています。このバージョンは以前にリリースされ、完全に PHP フレームワーク内で開発されたネイティブ バージョンです。 d に対応する memcached は libmemcached に基づいているため、相対的に言えば、memcached バージョンの方がより完全な機能を備えています
。
memcache:http://cn2.php.net/manual/en/book.memcache.php
memcached:http://cn2.php.net/manual/en/book.memcached.php
2. Memcache はネイティブに実装され、OO インターフェイスと非 OO インターフェイスの共存をサポートします。 Memcached は libmemcached を使用し、OO インターフェイスのみをサポートします。
3. memcached のもう 1 つの非常に賞賛すべき点は、フラグが動作中に設定されず、統一された setOption() があることです。 Memcached は、memcached プロトコルの多くを実装します。
4.memcached はバイナリ プロトコルをサポートしていますが、memcache はサポートしていません。これは、memcached のパフォーマンスが高いことを意味します。ただし、memcached は現在、長時間接続をサポートしていません。
?
memcached は、さまざまな の保存に使用できる高性能分散メモリ オブジェクト キャッシュ システムです。
画像、ビデオ、ファイル、データベース検索結果などを含むデータをフォーマットします。
?
を使用する メモリキャッシュ d の Web サイトは通常、比較的大きなトラフィックを伴います。データベースへの負担を軽減するために、 を使用します。 メモリキャッシュ d はメモリ内の情報の一部を保存するキャッシュ領域として機能し、フロントエンド で使用できます。
?
アクセスと出金は十分に迅速に行ってください。
一?
Memcached サーバー側のインストール
(ここでシステムサービスとしてインストールします)
win32 バイナリ: memcached-win32-bin.zip ダウンロード アドレス: http://code.jellycan.com/memcached/
1 ファイルを
に解凍します。c:\memcached
2 コマンドライン入力
C:\memcached\memcached.exe -d install
注: 将来的には、Windows を起動するたびに memcached が Windows のサービスとして自動的に開始されるようになります。これでサーバー側のインストールが完了しました。
3 コマンドライン入力
C:\memcached\memcached.exe -d start
このコマンドは Memcached を開始します。デフォルトのリスニング ポートは 11211 です。memcached.exe -h
を通じてヘルプを表示できます。?
コマンドラインでのテスト
4、 テルネット 127.0.0.1 11211?? (Telnet接続を使用して成功したかどうかをテストします)
5、 基本情報を表示するには、stats コマンドを入力します。 次に、コマンドラインに netstat -n -a と入力して、ポートを表示しますか?
memcache サーバーのセキュリティ:
Memcache サーバーは、クライアントに接続した後、検証プロセスを行わずに直接動作します。サーバーがインターネットに直接公開されると、データ漏洩につながる危険性が高まります。 公開されて関係のない人が閲覧すると、サーバーに侵入されたり、未知のバグやバッファオーバーフローが発生したりする可能性があります。これらは私たちには未知のことであり、その危険性は予見できます。 セキュリティのために、ハッカーの侵入やデータ漏洩を防ぐための 2 つの提案を次に示します。
ここで、memcache サーバー構成の変更の問題について次のように説明します。
1> 内部ネットワーク IP を使用して Web アプリケーション サーバー呼び出しを行うことはできません (memcache サーバーをサーバー 192.168.1.55
に配置するなど)。2> ポートを 11200 に変更するなど、変更します
3> 1024M (1G メモリ) などのメモリを割り当てます
方法は次のとおりです。
?
1>開始>実行: CMD (OK)
2>cd C:memcached (Enter)
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 Memcached(); $memcache->addServer('127.0.0.1', 11211 ) or die ( "Could not connect Memcached server!" ); $memcache->set( 'Memcached', "hello Memcached!<br/>"); echo $memcache->get('Memcached'); ?>
<?php $memcache = new Memcache(); $memcache->connect('127.0.0.1', 11211 ) or die ( "Could not connect Memcached server!" ); $memcache->set( 'Memcache', "hello Memcache!<br/>"); echo $memcache->get('Memcache'); ?>
结果如图:
恭喜你,配置成功了,现在开始慢慢捣鼓吧!不能运行看配置是否成功,或者检查下端口是否开放
?
方法二
可以避开扩展、重新编译所带来的麻烦,那就是直接使用 php-memcached-client。
本文选用第二种方式,虽然效率会比扩展库稍差一些
,但问题不大。
首先 下载 memcached-client.php,在下载了 memcached-client.php 之后,就可以通过这个文件中的类“memcached”对 memcached 服务进行操作了。其实代码调用非常简单,主要会用到的方法有 add()、get()、replace() 和 delete(),方法说明如下:
add ($key, $val, $exp = 0)
往 memcached 中写入对象,$key 是对象的唯一标识符,$val 是写入的对象数据,$exp 为过期时间,单位为秒,默认为不限时间;
get ($key)
从 memcached 中获取对象数据,通过对象的唯一标识符 $key 获取;
replace ($key, $value, $exp=0)
使用 $value 替换 memcached 中标识符为 $key 的对象内容,参数与 add() 方法一样,只有 $key 对象存在的情况下才会起作用;
delete ($key, $time = 0)
删除 memcached 中标识符为 $key 的对象,$time 为可选参数,表示删除之前需要等待多长时间。
下面是一段简单的测试代码,代码中对标识符为 '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 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。