ホームページ  >  記事  >  バックエンド開発  >  memcache_PHP チュートリアルでキャッシュをクリアするいくつかの方法の概要

memcache_PHP チュートリアルでキャッシュをクリアするいくつかの方法の概要

WBOY
WBOYオリジナル
2016-07-13 17:07:471567ブラウズ

テストや他のアプリケーションを実行するときに、memcache のキャッシュをすばやくクリアしたいことがあります。以下に memcache のキャッシュをクリアする方法をいくつかまとめました。この方法が皆さんのお役に立つことを願っています。

過去に同僚からクリアするように頼まれました。 memcache キャッシュ。私は常に kill コマンドを直接使用してプロセスを終了します。後で、緊急時に memcachd のキャッシュをクリアして記録する簡単な方法があることを知りました。

1. まず、ssh コマンドを使用して、memcached が配置されているサーバーにログインします。 コマンドは次のとおりです。

コードは次のとおりです#ssh root@192.168.1.1root パスワードを入力して、対応するサーバーにログインします。
コードをコピー

2. Telnet コマンドの後に、Tomcat サービス構成ファイルで指定された memcached 起動ポートを使用します。

コードは次のとおりです

コードをコピー#telnet ローカルホスト 11211

以降の表示:
127.0.0.1を試しています…

localhost.localdomain (127.0.0.1) に接続しました。

エスケープ文字は「^]」です。


3. この時点で、次の内容を入力し、Enter キーを押してキャッシュの内容をクリアします。

コードは次のとおりです

コードをコピー期限切れのキャッシュをクリア
すべてフラッシュ

4. 最後に Telnet を終了し、quit コマンドを使用して、exit してリモート ホストを終了します。

コードは次のとおりです

コードをコピー/***/ class mem_dtor は Memcache を拡張します {www.bkjia.com
* Memcached の期限切れメモリのリサイクル
プライベート $server_id;
パブリック関数 __construct($host,$port)
{
$this->server_id = "$host:$port";
$this->connect($host,$port);
}
//期限切れのメモリをすべてリサイクルします
パブリック関数 gc()
{
$t = 時間();
$_this = $this;
$func = function($key,$info) ($t,$_this) を使用します
{
if($info[1] - $t delete($key);
}
};
$this->リスト($func);
}
// キャッシュされたすべてのコンテンツに関する情報を表示します
パブリック関数 info()
{
$t = 時間();
$func = function($key,$info) ($t) を使用
{
echo $key,' => Exp:',$info[1] - $t,"n" //キャッシュオブジェクトの残り有効期限を表示します
; };
$this->リスト($func);
}
プライベート関数リスト($func)
{
$sid = $this->サーバーID;
$items = $this->getExtendedStats('items') //memcached のステータスを取得します
; foreach($items[$sid]['items'] as $slab_id => $slab) //指定されたサーバー ID のすべてのスラブを取得します
{
$item = $this->getExtendedStats('cachedump',$slab_id,0); // すべてのスラブを走査します
foreach($item[$sid] as $key => $info) //Slab にキャッシュされたオブジェクト情報を取得します
{
$func($key,$info);
}
}
}
}
$mem = 新しい mem_dtor('127.0.0.1',11211);
$mem->info();//ステータスを表示
$mem->gc(); //リサイクル


memcacheキャッシュの一括削除ソリューション

Memcache はデフォルトで delete(key) と flash_all のみをサポートします。これらの 2 つの方法は極端すぎるため、次のようなユーザーの特定のニーズを満たすことができません。「aaaaaaaa_」で始まるすべてのキャッシュを一括削除する場合はどうすればよいですか?
1 getExtendStats はすべてのアイテムを走査し、指定されたキーを削除します (非推奨)
対応する php コードと perl プログラムがインターネット上にありますので、興味があれば参照してください。ローカル テスト中には使用できますが、実際のサーバーでは使用しないでください。

DBと組み合わせた2つのmemcache


方法: キャッシュを設定するたびに、キーの値をデータベースに保存し、キャッシュを削除する場合は、データベースにクエリを実行して対応する情報を見つけ、memcache で削除します
。 短所: データとディスクの無駄
3 memcache 擬似名前空間 (推奨)
Memcache はデフォルトでは名前空間を提供しませんが、名前空間をシミュレートするグローバル変数を設定できます。コードは次のとおりです。

コードは次のとおりですコードをコピー
// 名前空間を保存するためのキーを生成します
$ns_key = $memcache->get("foo_namespace_key");
//キーが存在しない場合はキーを作成し、デフォルトで現在のタイムスタンプを識別子として使用します
if($ns_key===false) $memcache->set("foo_namespace_key",time());
// namespace_key に基づいて実際のキーを生成し、それが唯一のキー値であることを確認します
$my_key = "foo_".$ns_key.$otherParms;

//次に、結合された my_key 値を使用して、キャッシュする必要があるさまざまなデータを設定します
$memcache->set($my_key,$value,false,expire);

//または、キー値は以前に保存されたキャッシュを取得します
$memcaceh->get($my_key);

//データベースを変更した後や一部の情報を削除した後など、名前空間全体のオブジェクトを削除する必要がある場合

//ns_key の値を変更すると、今後キャッシュにアクセスするときに、前回はアクセスされなくなり、キャッシュの一括削除が実現します
$memcache->set("foo_namespace_key",time()); ?>




上記は私の個人的な意見ですので、ご意見をお聞かせください

http://www.bkjia.com/PHPjc/629897.html
本当

http://www.bkjia.com/PHPjc/629897.html技術記事時々、テストや他のアプリケーションの際に memcache のキャッシュを素早くクリアしたいと思うことがあります。以下に memcache のキャッシュをクリアする方法をまとめました。この方法が皆さんのお役に立てれば幸いです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。