zoukankan      html  css  js  c++  java
  • memcache概念浅谈及名称混乱之区分

    关于memcache这个现在应用广泛的组件,大大提高的网站的响应速度,也方便了程序开发缓存的应用。但是目前针对memcache,网上的资料 大同小异,尤其基于LAMP的网站居多,php/pcel又有两个memcache的client,所以导致很多混乱。这里我研究了两天,记录一下,也方 便有疑问的同学查看。

    1   首先 memcache(服务端)的介绍就不多说了。一个基于内存的缓存系统,它是一个服务。并且*nux上大多数服务都以守护进程的形式存在,比如http服务有对应的httpd,ssh有对应的sshd 等等。所以针memcache的守护进程就是memcached 了,无可厚非。 安装好服务后,就是启动这个守护进程了。

    /usr/local/bin/memcached –d   等等一系列选项 ,默认端口是11211  。关于memcache(服务端),请参考官网:http://memcached.org/  。

    2   既然sever端有服务了,接下来就需要有client 能连接上,以提供服务啊。当然可以通过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同时提供了更方便的命令行工具(省着telnet 11211):如memcat --servers=xxx  / memstat --servers=xxx 等。

    4  有了libmemcache 这个牛X的client。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

  • 相关阅读:
    实用工具---制作试卷
    RDP Client 参数含义调查
    xenserver 虚拟机定时开关机实现
    xenserver 脚本学习之/opt/xensource/bin/xapi-autostart-vms
    最佳的前端监听事件触发方式
    前端之Angularjs
    网页分享
    面试题之事务
    Spring Security安全访问控制解决方案的安全框架
    docker部署
  • 原文地址:https://www.cnblogs.com/Alight/p/3548582.html
Copyright © 2011-2022 走看看