1.Memcacheとは
memcacheは、分散型の高速キャッシュデータベースシステムです。統合された巨大なハッシュテーブルをメモリに保持することで、画像、動画、ファイル、データベースの取得結果など、さまざまな形式でデータを保存できます。簡単に言えば、データはメモリに転送されてからメモリから読み取られるため、読み取り速度が大幅に向上します。現在、多くのWebサイトで、Webサイトのアクセス速度を向上させるために使用されています。Memcacheの公式ウェブサイト:http://memcached.org
Memcacheの使用シナリオ:
1。非永続ストレージ:データストレージの要件が低い
2.分散ストレージ:スタンドアロンでの使用には適していません
3.キー/値ストレージ:単純な形式であり、サポートされているリスト、アレイデータ形式の
特性と制限:
1。メモリが十分である限り、Memcachedで維持できるアイテムデータの量に制限はありません。
2. Memcachedシングルプロセスは、32ビットシステムで最大2Gのメモリを使用できます。64ビットシステムの場合、制限はありません。これは32ビットシステムの制限によるものですが、プロセスは最大2Gを使用できます。より多くのメモリを使用したい場合は、複数に分割できます。ポートは複数のMemcachedプロセスを有効にします。
3.永続的に設定された30日の最大データ有効期限も、この時点で期限切れになります。定数REALTIME_MAXDELTA 60 60 24 * 30制御
4.最大キー長は250バイトで、この長さを超えると保存できません。定数KEY_MAX_LENGTHコントロール
5.1つのアイテムの最大データは1MBで、1MBを超えるデータは保存されません。定数POWER_BLOCK 1048576は、デフォルトのスラブサイズであるコントロールに使用されます。
6.同時接続の最大数は200で、conn_init()のfreetotalによって制御され、ソフト接続の最大数は1024であり、settings.maxconns = 1024によって制御されます
。7 。スペース占有に関連するパラメーター:設定.factor = 1.25、設定.chunk_size = 48、スラブデータの占有とステッピングメソッドに影響を与える
memcachedは、非ブロッキングであるため、メモリの読み取りと書き込みの速度が非常に速いため、libeventライブラリに基づく非ブロッキングソケット通信サービスです。 。
Memcachedはサーバー側とクライアント側に分かれており、複数のサーバー側とクライアント側を構成でき、分散サービスで広く使用されています。
Memcachedは、小規模なデータ分散プラットフォームとして非常に効果的です。
Memcachedは、キーと値を1対1で対応させます。キーのデフォルトの最大サイズは128バイトを超えることはできず、値のデフォルトのサイズは1M、つまり1つのスラブです。2Mの値を格納する場合(連続) 、2つのスラブを使用することはできません。2つのスラブは連続しておらず、メモリに保存できないため、スラブのサイズを変更する必要があります。複数のキーと値を保存する場合、スラブが使い果たされていなくても、他のデータは保存されません。
次に、Mecachedとmemcacheおよびmemcachedの違い
先来解释下标题中三种写法:首字母大写的Mecached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用作存储缓存数据的“容器”。Memcached是可以独立在web服务器之外任何服务器,甚至可以是集群。memcached和memcache是Memcached的客户端,通过二者访问Memcached服务器,向容器存取数据。二者用途一致,但在用法上稍有差异。如下:
1. memcachedは2004年2月に最初に開発され、最後の更新は2013年4月でしたが、memcachedは2009年1月に最初に開発され、最終的に2014年1月に更新されました。したがって、memcacheの履歴はmemcachedよりも前です。詳細については、以下を参照してください
。memcache:http://pecl.php.net/package/memcache memcached:http
://pecl.php.net/package/memcached
2. memcacheは、完全にPHPのネイティブバージョンです。フレームワークOO(オブジェクト指向)インターフェースと非OOインターフェースの共存をサポートするために開発されたmemcahedは、libmemcachedに基づいており、OOインターフェースのみをサポートします。つまり、memcacheが拡張されている場合は他のものをインストールする必要はありませんが、memcachedをインストールする場合はlibmemcachedをインストールする必要があります。libmemcachedはmemcacheのCクライアントであるため、メモリとスレッドの安全性が低いという利点があります。Sina Weiboは、以前にPHPのmemcacheをPHPのmemcachedに完全に置き換えたと言われています。高い同時実行性により、安定性が大幅に向上しました。
3. Memcachedには便利な場所があります。つまり、フラグは操作中に設定されませんが、設定する統合されたsetOption()関数があり、例としてキャッシュされたデータを追加します。
#memcache:
bool Memcache::add (string $key,mixed $var [, int $flag [,int $expire]])
#memcached:
public bool Memcached::add(string $key ,mixed $value [, int $expiration])
上記のそれぞれのaddメソッドからわかるように、memcacheのaddメソッドの3番目のパラメーターはデータを圧縮するかどうかを表すため、キャッシュで有効期限を設定する必要があるが、flagパラメーターが前にある場合は、次のことを行う必要があります。毎回フラグを立ててください!memcachedでは、setOption()が統合設定に使用されます(圧縮はデフォルトでオンになっています)。
4. Memcachedはmemcacheよりも多くのmemcacheプロトコルをサポートします。つまり、memcachedにはgetMulti()やsetMulti()関数などのメソッドが多くありますが、memcacheはそれらをサポートしていません。その他のメソッドは、公式のPHPマニュアルにあります。memcache:http://php.net/manual/zh/book.memcache.php memcached:http
://php.net/manual/zh/book.memcached.php
5大きな違いは、memcachedはバイナリプロトコルをサポートしていますが、memcacheはサポートしていないことです。つまり、memcachedのパフォーマンスは高くなります。しかし、多くの人がmemcachedは長いリンクをサポートしていないと言います。そうではありません。公式マニュアルを 参照してください:http://php.net/manual/zh/memcached.construct.phplong
を使用する場合は上記に明確に記載されていますリンク。。。。。したがって、memcachedは長い接続を実現できます。
6. 2つが同じ機能の一部を実装するために使用するアルゴリズムにも違いがあります。たとえば、「一貫性のあるハッシュアルゴリズム」とは、ストレージノードが追加または削除されたときに、ストレージノードへの影響が少ないことを誰もが知っています。 memcachedに保存されているデータPHPの2つの拡張ライブラリで使用できるアルゴリズムですが、設定方法が異なります。
memcache
修改php.ini添加:
[Memcache]
Memcache.allow_failover = 1
......
......
Memcache.hash_strategy = consistent
Memcache.hash_function = crc32
......
......
或在PHP中使用 ini_set 方法
Ini_set('memcache.hash_strteagy ','standrad');
Ini_set('memcache.hash_function','crc32');
memcached
$mem = new memcached();
$men->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
3つの関係の説明を要約します。たとえば、Memcahedはリザーバー(コンテナー)、memcacheはプラスチックチューブ、memcachedはPVCチューブです。プラスチックパイプまたはPVCパイプを使用して、貯水池に水を充填または汲み上げることができます。使用する方法は人によって異なります。PVCパイプは、水の輸送においてプラスチックパイプよりも明らかに高速であり、バルブ、開口部、分岐を装備できます。など。プラスチックチューブよりも多くのパターンがあります。上記の分析から結論を導き出すこともできます。memcachedはmemcacheよりも優れているため、将来の開発プロセスでは、memcachedを使用してみてください。
3.LinuxでMemcacheサーバーとクライアントをインストールします
4つ目は、PHPでMemcacheを使用する
システムクラス:addServer、addServers、getStats、getVersion
データクラス:add、set、delete、flush、replace、increment、get
Advancedクラス:setMulti、deleteMulti、getMulti、getResultCode、getResultMessage
<?php
$m = new Memcache();
$array = array(
array('127.0.0.1',11211),
array('127.0.0.2',11211),
);
$m->addServers($array); //连接服务端
print_r($m->getStats()); //查看状态
print_r($m->getVersion()); //查看版本号
//两个add,后面一个不会覆盖掉前面一个
$m->add('mkey','mvalue',600);
$m->add('mkey','mvalue2',600);
echo $m->get('mkey');
//replace覆盖前面相同的key
$m->replace('mkey','mvalue2',600);
//set方法既可以直接覆盖也会替换覆盖
$m->set('mkey','mvalue',600);
//删除
$m->delete('mkey');
//清空全部缓存
$m->flush();
//每次加5和减5操作
$m->increment('num',5);
echo $m->get('num');
$m->decrement('num',5);
//setMulti第一个参数是存储的数据,第二个是过期时间
$data1 = array(
'key' => 'value',
'key2' => 'value2',
);
$m->setMulti($data,0);
$result = $m->getMulti(array('key','key2'));
print_r($result);
//一次性删除多条数据
$m->deleteMulti(array('key','key2'));
print_r($result);
//错误编码与错误内容,官方参考文档:https://www.php.net/manual/zh/memcached.getresultcode.php
echo $m->getResultCode();
echo $m->getResultMessage();