PHP の分散キャッシュ memcached の使い方と操作方法
インターネットが台頭している今日、主要な Web サイトは、PHP として Web サイトのアクセス速度を向上させ、データベースの操作を軽減する方法に直面しています。開発者の皆さん、私たちが一般的に考えられる方法には、静的ページ処理、リーチ防止、アクセスを高速化するための CDN コンテンツ配布、mysql データベースの最適化とインデックス作成、Apache サーバー クラスターのセットアップ ()、および現在普及しているさまざまな分散キャッシュ テクノロジが含まれます。 memcached/redis など;
1. Memcached とは何ですか? >
a.Memcached は、データベースの負荷を軽減するための動的 Web アプリケーション用の高性能分散メモリ オブジェクト キャッシュ システムです。データとオブジェクトをメモリにキャッシュしてデータベースの読み取り回数を減らすことにより、動的なデータベース駆動型の Web サイトの速度が向上します。 Memcached は、キーと値のペアを格納するハッシュマップに基づいています。そのデーモンは C で書かれていますが、クライアントは任意の言語で書くことができ、memcached プロトコルを通じてデーモンと通信します。b. Memcached のキーは通常文字列であり、値を文字列内に繰り返すことはできません。 、配列、数値、オブジェクト、ブール値、バイナリ データ、写真とビデオ
c.Memcachedデフォルトのサービスポートは 11211 です
2. PHP で Memcached を使用する手順準備:
Memcached サービスのインストール パッケージ:memcached-1.2.6-win32-bin.7z と Memcached サービスにアクセスするための DLL ライブラリ: php_memcache.dll をダウンロードします。
www.memcached.org (公式サイトにはアクセスできないようです。他の場所からダウンロードできます)パッケージ memcached-1.2.6-win32 -bin.7z を解凍し (解凍して Web サーバーと同じディレクトリにコピーできます)、cmd を操作して、解凍したディレクトリに入り、次のコマンドでインストールします: memcached.exe -d install
<3>インストール後 (インストールが完了したかどうかを判断するには、memcached サービスがあるかどうかを確認できます)サービス リスト内))、次のコマンドで cmd を起動します: memcached.exe -d start
具体的な操作は次のとおりです:
<4> サービス終了後、ダウンロードした
php_memcache.dll を ext ディレクトリに配置します。 Web サーバーの php5 ディレクトリ配下
<5> ; php.ini を変更し、拡張ライブラリ php_memcache.dll をロードし、Apache サーバーを再起動します
<?phpheader("Content-type:text/html;charset=utf-8");//创建Memcache对象$mem = new Memcache(); //连接Memcache服务器if(!$mem->connect("127.0.0.1")) { echo "连接Memcache服务器失败!";}//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒if ($mem->set('myword','hello world',MEMCACHE_COMPRESSED,50)){ echo "设置值成功!";}?></p> <p> <span style="font-family:KaiTi_GB2312; font-size:18px"><br></span></p> <span style="color:#ff0000"><6> Memcached には主に未処理の操作があります (値の作成、読み取り、更新、削除の操作です。詳細についてはマニュアルを参照してください)。値を設定してから、値の操作を行います。 ></span><p><span style="font-family:KaiTi_GB2312; font-size:18px"><span style="color:#ff0000">a. 値の設定ページ<br></span></span></p> <p><span style="font-family:KaiTi_GB2312; font-size:18px"></span></p> <pre code_snippet_id="627202" snippet_file_name="blog_20150325_2_7939456" name="code" class="php"><?phpheader("Content-type:text/html;charset=utf-8");$mem = new Memcache(); if(!$mem->connect("127.0.0.1")) { echo "连接Memcache服务器失败!";}//读取键myword值$value = $mem->get('myword');if(!$value){ echo "读取失败!";}else{ echo "读取的值=".$value;}
<?phpheader("Content-type:text/html;charset=utf-8");//创建Memcache对象$mem = new Memcache(); //连接Memcache服务器if(!$mem->connect("127.0.0.1")) { echo "连接Memcache服务器失败!";}//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒if ($mem->set('myword','hello world',MEMCACHE_COMPRESSED,50)){ echo "设置值成功!";}//读取键myword值$value = $mem->get('myword');if(!$value){ echo "读取失败!";}else{ echo "读取的值=".$value;}//更新键值$mem->replace('myword','hello everybody!');$value = $mem->get('myword');if(!$value){ echo "读取失败!";}else{ echo "读取的值=".$value;}//删除键myword值$mem->delete('myword');$value = $mem->get('myword');if(!$value){ echo "读取失败!";}else{ echo "读取的值=".$value;}//关闭$mem->close(); ?>
<7>多个memcached服务器设置,其实就比一个memcached服务器改变一点点,就是把多个memcached的服务器通过方法addserver添加到连接池中,这样设置完后,crud操作时,内部就会通过相应算法均衡连接相应服务器并执行相应操作中。
<?phpheader("Content-type:text/html;charset=utf-8");//创建Memcache对象$mem = new Memcache(); //添加多台memcached服务器$mem->addserver('192.168.0.1',11211); $mem->addserver('192.168.0.2',11211);$mem->addserver('192.168.0.3',11211);$mem->addserver('192.168.0.4',11211);//设置,'myword'参数代表键key,'hello world'代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒if ($mem->set('myword','hello world',MEMCACHE_COMPRESSED,50)){ echo "设置值成功!";}//读取键myword值$value = $mem->get('myword');if(!$value){ echo "读取失败!";}else{ echo "读取的值=".$value;}?>
<8>memcache的访问是无用户状态,安全性需要考虑,一般通过放在内网,并通过防火墙限制外网访问memcache端口来达到安全
<9>通过修改php.ini,可以把session的值放入memcache服务器中
session.save_handler = files改成session.save_handler = memcached
session.save_path = "N;MODE;/path"改成 session.save_path = "tcp://127.0.0.1:11211"