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を使用してデータベース内のクエリー結果を保存し、データベースのボトルネックの問題を解決することができます.
 

  
  
  
  
  1. <?php 
  2.  
  3. require_once 'dbconfig.php'
  4.  
  5. // Memcache  
  6.  
  7. $mc = new Memcache(); 
  8.  
  9. $mc->connect('127.0.0.1',11211); 
  10.  
  11. $uid = (int)$_GET['uid']; 
  12.  
  13. $sql = "select * from users where uid='$uid'"
  14.  
  15. $key = md5($sql);  // md5 key 
  16.  
  17. // memcache  
  18.  
  19. if(!($datas = $mc->get($key))){ 
  20.  
  21.     $mysqli = new mysqli($dbhost$dbuser$dbpw$dbname); 
  22.  
  23.     $result = $mysqli->query($sql); 
  24.  
  25.     while ($row=$result->fetch_assoc()) 
  26.  
  27.     { 
  28.  
  29.         $datas [] = $row
  30.  
  31.     } 
  32.  
  33.     // ,  
  34.  
  35.     $mc->add($key,$datas); 
  36.  
  37.  
  38. var_dump($datas); 
  39.  
  40. ?> 

以下、Memcacheの分散配置案を簡単に共有します.
通常、大量のデータの処理方法、大きなファイル内のデータのソートについて思い出します.通常はhashを用いて大きなファイルの縮小を実現するが,ここではこの方法を参考にして,キャッシュするレコードをhashの方法で各サーバにマッピングして格納し,2台のサーバがあれば,記録したキー値に対してhashを取り,型を取って対応するMemcacheサーバにマッピングすることができる.キーコードは次のとおりです.
 

  
  
  
  
  1. $sc = $servers[hash($key)%$N];  //N
  2. $mc = new Memcache($sc); 
  3. $mc->set($key,$value); 

しかし、この方法はあまりにも堅牢で、サーバの数が変わると、ほとんどのキャッシュが失効します.この損失を最小限に抑えることができるコンシステンシhash方式を採用することができる.具体的にはリングを用いて実現し、ステップは以下の通りである.
1.key値を32ビットの整数に変換する.32ビットの整数をリングとして想像します
2.サーバをリングにマッピングし、hash処理サーバの情報(IP、ホスト名)などを用いて32ビットの整数に変換する.
3.データをサーバーにマッピングして、順勢針の方向を取って、データを回り道の最初にぶつかったサーバーに保存する.
4.サーバを削除すると、次のサーバにデータが転送され、サーバを追加すると、次のサーバの負担が軽減されます.
これは、1つのサーバを減らすと、そのサーバの負荷が次のサーバに累積され、均等な効果ではないため、特に良い方法ではありません.