ホームページ  >  記事  >  php教程  >  PHPでMemcacheを使用する

PHPでMemcacheを使用する

WBOY
WBOYオリジナル
2016-06-21 08:47:511084ブラウズ

1.memcache拡張機能をインストールする

まず、phpinfo() 関数を使用して、現在の PHP 環境が memcache 拡張機能をサポートしているかどうかを確認します。サーバーのルート ディレクトリに新しいファイル info.php を作成し、そのファイルに

を書き込みます。

phpinfo();

次に、ブラウザに http://localhost/info.php と入力してアクセスし、memcache 拡張機能があるかどうかを確認します。通常、サーバーにはデフォルトで memcache 拡張機能がインストールされていないため、インストールする必要があります。それは私たち自身です。まず、インターネットから php_memcache.dll ファイルをダウンロードし、そのファイルを php 拡張ディレクトリ (私の場合は php5/ext/) にコピーし、このファイルを拡張ディレクトリに追加します。まだ追加が完了していません。 php 設定ファイル php.ini に extension=php_memcache.dll を追加します。php 環境は自動的に php 拡張機能ディレクトリを見つけて、この拡張機能を php 環境に追加します。この時点で、Apache を再起動し、http: //localhost/info.php、

が表示されます

memcache.png これは、memcache 拡張機能がインストールされていることを意味します。 PHP のマニュアルをもう一度見てみると、memcache 拡張機能を使用する方法が 2 つあることがわかりました。1 つはプロセス指向の方法で、もう 1 つはオブジェクト指向の方法です。指向の方法。

2. memcache の使用例

コードを直接投稿してください。

//memcache クラスをインスタンス化します

$mem = 新しい Memcache;

//memcache サーバーに接続します (パラメーターはサーバー IP、ポート)、

//pconnect -- 継続的な接続を意味します

$mem->connect('localhost', 11211);

//addserver は memcache サーバーを追加することを意味します、

//複数の memcache サーバーで分散キャッシュを実装できます

//$mem->addsever('www.pccxin.com', 11211);

//$mem->addsever('www.frontu.net', 11211);

//memcache サーバーに要素を追加します

//bool Memcache::add ( string $key ,

//混合 $var [, int $flag [, int $expire ]] )

//パラメータはキー名、値(文字列配列オブジェクト)、

//MEMCACHE_COMPRESSED タグを使用してデータを圧縮します (zlib を使用)、

// 時間を節約します (秒単位)

$mem->add('mystr', 'これは初めての memcache テストです!',

MEMCACHE_COMPRESSED、3600);

//add は繰り返し追加されません。値を変更したい場合は、replace() または set

を使用できます。

//$mem->add('mystr', 'これは初めての memcache テストです!',

MEMCACHE_COMPRESSED、3600);

//データをサーバーに保存します

$mem->set('mystr', 'これは 2 回目の memcache テストです!',

MEMCACHE_COMPRESSED、3600);

//サーバーから要素を削除します

//$mem->delete('mystr');

//保存されているすべての要素をクリーン (削除)

//$mem->flush();

//memcache 内のデータを取得します

echo $mem->get('mystr').'
';

//memcache サーバーに要素を追加します

$mem->add('myarr', array('1'=>'aaa', '2'=>'bb', '3'=>'cc'),

MEMCACHE_COMPRESSED、3600);

var_dump($mem->get('myarr'));

echo '
';

クラス 人{

var $name = 'ショーンキング';

var $sex = '男性';

}

//memcache サーバーに要素を追加します

$mem->add('myobj', 新しい人);

var_dump($mem->get('myobj'));

echo '
';

//memcache のバージョン情報を取得します

echo 'バージョン:',$mem->getVersion();

//memcache パラメータ情報を取得します

echo '

';
<p> print_r($mem->getStats());</p>
<p> echo '
';

//memcached サーバーへの接続を閉じます。この関数は永続的な接続を閉じません。

// 永続的な接続は、Web サーバーがシャットダウンまたは再起動された場合にのみ閉じられます。同様に、

も使用できます。

$mem->close();

3. PHP はどこで memcache を使用します

a. データベースから読み取られたデータ (選択) は、memcache を使用して処理されます

通常、ページにアクセスすると、php は一度データベースに接続してデータベースからデータを読み取りますが、ページが存在する限り、アクセス数が多い場合、データベースは負荷に耐えることができません。初めてアクセスする場合、PHP にアクセスすると、データは memcache サーバーに保存され、有効期限が設定されるため、有効期限の前にデータベースにアクセスしてデータを読み取る必要がなくなります。 Web サイトのパフォーマンスが大幅に向上します (memcache データはメモリに保存されるため、読み取りが非常に高速になります)。以下に、データベースで memcache を使用するためのサンプル コードを投稿します。

//memcache オブジェクトをインスタンス化します

$mem = 新しい Memcache;

//memcache サーバーに接続します

$mem->connect('localhost', 11211);

/**

* 注:

* 1. 同じプロジェクトを 2 回インストールする場合、キーにはプレフィックス

が必要です

* $key = 'a_test';

* $key = 'b_test';

* 2. SQL ステートメントを添え字として使用して、同じ SQL ステートメントのデータのコピーを 1 つだけ memcache

に保存できるようにします。

*/

$sql = 'SELECT * FROM test';

$key = substr(md5($sql), 10, 8);

//memcache サーバーからデータを取得します

$data = $mem->get($key);

//memcache にデータがあるかどうかを判断します

if( !$data ){

$mysqli = new mysqli('localhost', 'root', '123456', 'testdb');

$result = $mysqli->query($sql);

$data = array();

while( $row=$result->fetch_assoc() ){

$data[] = $row;

}

$result->free();//メモリを解放します

$mysqli->close();//mysql 接続を切断します

//データを memcache サーバーに保存し、有効期限を設定します (秒単位)

$mem->set($key, $data, MEMCACHE_COMPRESSED, 3600);

}

print_r($data);

$mem->close(); //memcache 接続を閉じます

b. セッション制御セッションで

を使用します。

セッション情報を memcache サーバーに書き込みます

/**

* セッションは memcache クラスに保存されます

*/

クラス MemSession{

プライベート静的 $handler = null;

プライベート静的 $lifetime = null;

プライベート静的 $time = null;

const NS = 'session_';

/**

* 初期化関数

*/

プライベート静的関数 init($handler){

self::$handler = $handler;

self::$lifetime = ini_get('session.gc_maxlifetime');

self::$time = time();

}

public static function start(Memcache $memcache){

self::init($memcache);

session_set_save_handler(

array(__CLASS__, 'open');

array(__CLASS__, 'close');

array(__CLASS__, 'read');

array(__CLASS__, 'write');

array(__CLASS__, 'destroy');

array(__CLASS__, 'gc');

);

session_start();

}

public static function open($path, $name){

true を返す;

}

public static function close(){

true を返す;

}

public static function read($PHPSESSID){

$out = self::$handler->get(self::$session_key($PHPSESSID));

if( $out === false $out = null )

戻ります '';

$out を返す;

}

public static function write($PHPSESSID, $data){

$method = $data ? 'set' : 'replace';

return self::$handler->$method(self::$session_key($PHPSESSID),

$data, MEMCACHE_COMPRESSED, self::$lifetime);

}

public static function destroy($PHPSESSID){

return sele::$handler->delete(self::$session_key($PHPSESSID));

}

public static function gc($lifetime){

true を返す;

}

プライベート静的セッションキー($PHPSESSID){

$session_key = self::NS.$PHPSESSID;

return $session_key;

}

}

$memcache = 新しい Memcache;

$memcache->connect('localhost', 11211) または die('接続できませんでした!');

MemSession::start($memcache);

四、memcache の安全(不让别人访问)

1、内网连接

2、防火墙

iptables -A INPUT -p tcp -dport 11211 -j DROP 来拒否绝全部的访问、

再設定可能なIP

iptables -A INPUT -p tcp -s 192.168.1.111 -dport 11211 -j ACCEPT

iptables -A INPUT -p udp -s 192.168.1.111 -dpost 11211 -j ACCEPT



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。