phpはどのようにmemcache技術を採用してweb応用の運行効率を加速します
Memcacheは高性能の分散メモリキャッシュサーバであり、データベースクエリーの結果をキャッシュすることで、データベースへのアクセス回数を減らし、高同時処理を行う際にデータベースのボトルネックを突破することができます.同時に、一時ファイルを保存し、Webアプリケーションのアクセス速度を向上させることもできます.
Memcacheには次のような特徴があります.
1.内蔵メモリの保存方式を使用して、読み取り効率が高い;
2.libeventに基づくイベント処理方式;
3.プロセスを守る方式で分散システムで運行できる;
4.サービスが再起動されると、データはすぐに失われる.これはキャッシュ機能にすぎません.
Memcacheを構築する過程は言うまでもなく、memcache拡張を使用してMemcacheサーバにアクセスするのが一般的なので、memcache拡張をインストールする必要があります.
アクセスを拡張するAPI関数は、次のリンクをクリックしてアクセスできます.http://php.net/manual/zh/book.memcache.php
私たちは一般的にMemcacheを使用してデータベース内のクエリー結果を保存し、データベースのボトルネックの問題を解決することができます.
以下、Memcacheの分散配置案を簡単に共有します.
通常、大量のデータの処理方法、大きなファイル内のデータのソートについて思い出します.通常はhashを用いて大きなファイルの縮小を実現するが,ここではこの方法を参考にして,キャッシュするレコードをhashの方法で各サーバにマッピングして格納し,2台のサーバがあれば,記録したキー値に対してhashを取り,型を取って対応するMemcacheサーバにマッピングすることができる.キーコードは次のとおりです.
しかし、この方法はあまりにも堅牢で、サーバの数が変わると、ほとんどのキャッシュが失効します.この損失を最小限に抑えることができるコンシステンシhash方式を採用することができる.具体的にはリングを用いて実現し、ステップは以下の通りである.
1.key値を32ビットの整数に変換する.32ビットの整数をリングとして想像します
2.サーバをリングにマッピングし、hash処理サーバの情報(IP、ホスト名)などを用いて32ビットの整数に変換する.
3.データをサーバーにマッピングして、順勢針の方向を取って、データを回り道の最初にぶつかったサーバーに保存する.
4.サーバを削除すると、次のサーバにデータが転送され、サーバを追加すると、次のサーバの負担が軽減されます.
これは、1つのサーバを減らすと、そのサーバの負荷が次のサーバに累積され、均等な効果ではないため、特に良い方法ではありません.
Memcacheには次のような特徴があります.
1.内蔵メモリの保存方式を使用して、読み取り効率が高い;
2.libeventに基づくイベント処理方式;
3.プロセスを守る方式で分散システムで運行できる;
4.サービスが再起動されると、データはすぐに失われる.これはキャッシュ機能にすぎません.
Memcacheを構築する過程は言うまでもなく、memcache拡張を使用してMemcacheサーバにアクセスするのが一般的なので、memcache拡張をインストールする必要があります.
アクセスを拡張するAPI関数は、次のリンクをクリックしてアクセスできます.http://php.net/manual/zh/book.memcache.php
私たちは一般的にMemcacheを使用してデータベース内のクエリー結果を保存し、データベースのボトルネックの問題を解決することができます.
- <?php
-
- require_once 'dbconfig.php';
-
- // Memcache
-
- $mc = new Memcache();
-
- $mc->connect('127.0.0.1',11211);
-
- $uid = (int)$_GET['uid'];
-
- $sql = "select * from users where uid='$uid'";
-
- $key = md5($sql); // md5 key
-
- // memcache
-
- if(!($datas = $mc->get($key))){
-
- $mysqli = new mysqli($dbhost, $dbuser, $dbpw, $dbname);
-
- $result = $mysqli->query($sql);
-
- while ($row=$result->fetch_assoc())
-
- {
-
- $datas [] = $row;
-
- }
-
- // ,
-
- $mc->add($key,$datas);
-
- }
-
- var_dump($datas);
-
- ?>
以下、Memcacheの分散配置案を簡単に共有します.
通常、大量のデータの処理方法、大きなファイル内のデータのソートについて思い出します.通常はhashを用いて大きなファイルの縮小を実現するが,ここではこの方法を参考にして,キャッシュするレコードをhashの方法で各サーバにマッピングして格納し,2台のサーバがあれば,記録したキー値に対してhashを取り,型を取って対応するMemcacheサーバにマッピングすることができる.キーコードは次のとおりです.
- $sc = $servers[hash($key)%$N]; //N
- $mc = new Memcache($sc);
- $mc->set($key,$value);
しかし、この方法はあまりにも堅牢で、サーバの数が変わると、ほとんどのキャッシュが失効します.この損失を最小限に抑えることができるコンシステンシhash方式を採用することができる.具体的にはリングを用いて実現し、ステップは以下の通りである.
1.key値を32ビットの整数に変換する.32ビットの整数をリングとして想像します
2.サーバをリングにマッピングし、hash処理サーバの情報(IP、ホスト名)などを用いて32ビットの整数に変換する.
3.データをサーバーにマッピングして、順勢針の方向を取って、データを回り道の最初にぶつかったサーバーに保存する.
4.サーバを削除すると、次のサーバにデータが転送され、サーバを追加すると、次のサーバの負担が軽減されます.
これは、1つのサーバを減らすと、そのサーバの負荷が次のサーバに累積され、均等な効果ではないため、特に良い方法ではありません.