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