この記事では、memcache を使用して簡単なメモリ メッセージ キューを構築する方法を紹介します。この方法が皆さんの役に立つことを願っています。
memcache 関数は単純すぎます。get と delete の設定のみが可能で、リストの保存はできません。 もちろん、リストをシリアル化して memcache に保存することもできますが、データを保存する (キューの挿入またはデキュー) たびに、同時実行性の問題が発生します。これは、同時実行性が高い状況では保証することが困難です。データの一貫性!
ただし、memcache には、特定のキーに対応する値に 1 を加算するインクリメント操作があります (実際には加算操作であり、デフォルトでは 1 が加算されます)。この操作を使用して自動インクリメント ID を維持できます。データの一意性。 開始キー値を維持するために 2 つのポインターを追加すると、単純な単一フェーズ キューが構築されます。 !
コード:
コードは次のとおりです | コードをコピー |
/** * 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