memcache概念の浅談と名称の混乱の区分

3336 ワード

memcacheという現在広く応用されているコンポーネントについては,Webサイトの応答速度が大幅に向上し,プログラム開発キャッシュの応用も容易になった.しかし、現在memcacheに対して、ネット上の資料は大きく異なり、特にLAMPベースのサイトが多く、php/pcelにはmemcacheのclientが2つあるため、多くの混乱を招いている.ここで私は2日間研究して、記録して、疑問のある学生が調べるのに便利です.
1まずmemcache(サービス側)の紹介は多くありません.メモリベースのキャッシュシステムで、サービスです.また*nux上のほとんどのサービスは、httpサービスに対応するhttp d、sshに対応するsshdなど、デーモンプロセスの形で存在します.だから針memcacheの守護プロセスはmemcachedであり、間違いない.サービスをインストールすると、このデーモンプロセスが開始されます.
/usr/local/bin/memcached–dなど、デフォルトポートは112111です.memcache(サービス側)については、公式サイト:http://memcached.org/  。を参照してください.
2 sever側にサービスがある以上、次はクライアントが接続してサービスを提供する必要があるでしょう.もちろんtelnet xxxを通ることができます.xxx.xxx.xx 11211この方式はserver端子に直接接続されており、これは手作業でデバッグするのに便利である.さらにtelnet上には、stats/stats items/stats cachedump x yなどのコマンドがあります.しかし,様々な言語のプログラム接続についてはclientによって実現する必要がある.次にphpからmemcache(サービス側)のclient(クライアント)が開発され、残念ながらこのclientをmemcache(クライアント)と呼ぶ.このクライアントはpcel形式で発行されます:http://pecl.php.net/package/memcache .またphpマニュアルにおけるmemcacheの使用:http://www.php.net/manual/en/memcache.examples-overview.phpの例もこのclientに基づいている.
3それから09年の時、Brian Akerはc/c++に基づくmemcacheのクライアントを開発しました.libmemcacheと呼ばれています.公式サイト:http://libmemcached.org/libMemcached.htmlこのclientはメンテナンスが速く、そして機能効率などはphpのmemcache(クライアント)よりも優れています(もちろん、一つはc/c++、一つはphpです.これはしばらく議論しないで、後で見てください).このclientは、memcat--servers=xxx/memstat--servers=xxxなど、より便利なコマンドラインツール(telnet 11211を省く)を提供しています.
4 libmemcacheという牛Xのクライアントができました.phpも寂しくないのに、何で使わないの?そこでphpはlibmemcacheに基づくclientを作り出し、残念ながらこのclientはmemcached(クライアント)と呼ばれている:pcel形式で公開されている:http://pecl.php.net/package/memcached.このclientの特徴は基本的にlibmemcacheとあまり差がありません.
5だからphp開発にとって、特定の文脈の中で同名の意味を区別しなければならない.memcache、memcached、client、serverの場合があります.いずれにしても、私たちがこの関係と原理を知っていれば、神馬は浮雲です.
 
class MCache

{



    private static $server  = array('127.0.0.1', 11211);

    private static $client  = 'memcached'; // memcache or memcached



    private static function get_memcache()

    {

        static $memcache;

        if (!is_object($memcache))

        {

            $memcache = self::$client === 'memcached' ?  new Memcached() : new Memcache ;

            $memcache->addServer(self::$server[0],self::$server[1]);

        }

        return $memcache;

    }



    public static  function set($key, $value, $expire=600)

    {

        self::$client === 'memcached' ?  self::get_memcache()->set($key, $value, $expire)

                                :  self::get_memcache()->set($key, $value, MEMCACHE_COMPRESSED, $expire);

    }



    public static  function get($key)

    {

        return self::get_memcache()->get($key);

    }



}



MCache::set('test_one', 'value_one', 60); # 60 Sec

print_r(MCache::get('test_one'));


変換先:http://blog.csdn.net/aylazhang/article/details/6935569
拡張:memcacheのkeyに名前空間を追加する:http://www.cnblogs.com/xianbei/archive/2011/01/02/1921258.html