ホームページ >バックエンド開発 >PHPチュートリアル >memcache による単純なメモリ メッセージ キューの構築_PHP チュートリアル

memcache による単純なメモリ メッセージ キューの構築_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:46:56909ブラウズ

この記事では、memcache を使用して簡単なメモリ メッセージ キューを構築する方法を紹介します。この方法が皆さんの役に立つことを願っています。

memcache 関数は単純すぎます。get と delete の設定のみが可能で、リストの保存はできません。 もちろん、リストをシリアル化して memcache に保存することもできますが、データを保存する (キューの挿入またはデキュー) たびに、同時実行性の問題が発生します。これは、同時実行性が高い状況では保証することが困難です。データの一貫性!
ただし、me​​mcache には、特定のキーに対応する値に 1 を加算するインクリメント操作があります (実際には加算操作であり、デフォルトでは 1 が加算されます)。この操作を使用して自動インクリメント ID を維持できます。データの一意性。 開始キー値を維持するために 2 つのポインターを追加すると、単純な単一フェーズ キューが構築されます。 !

memcache queue

コード:

memcached に関するいくつかのこと


メモリ格納方法(スラブアロケータ)

memcached のデータ保存方法は、データシャーディングであるスラブアロケーターです。データが来ると、まずメモリが異なるサイズのチャンクに分割され、適切なサイズのチャンクに保存されます。 以前のバージョンではメモリが直接割り当てられていたため、メモリの断片化やランダム検索などの問題が発生していました。 。 。


データ有効期限削除メカニズム

Memcached は有効期限が切れてもデータを削除しませんが、有効期限が切れたデータにはアクセスできず、有効期限が切れたデータが占めていたスペースは再利用されます
Memcached は遅延有効期限を使用します。データ項目の有効期限が切れているかどうかを積極的にスキャンするのではなく、データの取得時に有効期限が切れているかどうかを判断します。 削除アルゴリズムは LRU (Least Recent Used) で、最近使用されていないデータを優先的に削除します

Memcached の分散メカニズム

memcached は分散キャッシュですが、memcached 自体は分散メカニズムを実装していません。分散機能は主にクライアントによって実装されます。

このプログラムは、addserver を通じて複数の memcahced サービスをクライアントに追加します (memcache 拡張機能)。データにアクセスする前に、クライアントはまずハッシュ アルゴリズムを通じてデータが保存されているノードを取得し、次に memcached サーバーの 1 つがハングするとデータにアクセスします。または、memcached サーバーを追加すると、ハッシュ アルゴリズムに基づいてデータが保存されるノードが変更され、新しいサーバーがデータへのアクセスに使用されます。

コードは次のとおりです コードをコピー
/**
* memcache によって構築された単純なメモリキュー
*
* @作者: ジェフジン
​*/
クラス memList {
プライベート $memcache // memcache クラス

private $queKeyPrefix; //データキープレフィックス
private $startKey // 開始ポインタキー
private $startKey //エンドポインタキー

パブリック関数 __construct($key){
$this->queKeyPrefix = "MEMQUE_{$key}_";
$this->startKey = "MEMQUE_SK_{$key}";
$this->endKey = "MEMQUE_EK_{$key}"; }

/**
*リストを取得
* 最初に開始ポインターと終了ポインターを取得してからデータを取得します
*
* @return 配列
​*/
パブリック関数 getList(){
$startP = $this->memcache->get($this->startKey);
$endP = $this->memcache->get($this->endKey); empty($startP) && $startP = 0;
空($endP) && $endP = 0;

$arr = array();
for($i = $startP ; $i $key = $this->queKeyPrefix . $i;
$arr[] = $this->memcache->get($key);
}
$arr を返します;
}

/**
*キューに挿入
* エンドポインタを後ろに移動して、自動インクリメントされる ID を取得します
* 次に、ポインタで指定された場所に値を保存します
*
* @return void
​*/
パブリック関数 in($value){
$index = $this->memcache->increment($this->endKey);
$key = $this->queKeyPrefix .
$this->memcache->set($key, $value);
}

/**
*チームを離れる
* 非常に簡単で、開始値を取り出し、開始ポインタを後方に移動します
*
* @return 混合
​*/
パブリック関数 out(){
$result = $this->memcache->get($this->startKey);
$this->memcache->increment($this->startKey);
$result を返します;
}

}

http://www.bkjia.com/PHPjc/632905.html

tru​​ehttp://www.bkjia.com/PHPjc/632905.html技術記事この記事では、memcache を使用して単純なメモリ メッセージ キューを構築する方法を紹介します。この方法が皆さんの役に立つことを願っています。 memcache 関数...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。