ホームページ > バックエンド開発 > PHPチュートリアル > PHP MemCached 勝利アセンブリ

PHP MemCached 勝利アセンブリ

WBOY
リリース: 2016-06-13 13:01:49
オリジナル
847 人が閲覧しました

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 のパフォーマンスが高いことを意味します。ただし、me​​mcached は現在、長時間接続をサポートしていません。

?

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 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート