站长论坛

标题: PHP5 像使用数组一样使用Memcache [打印本页]

作者: superadmin    时间: 2009-7-26 22:55
标题: PHP5 像使用数组一样使用Memcache
作者:张立冰

出处:http://www.libing.name/2008/03/13/php5-memcache-array.html

我们经常使用Memcache来做数据的缓存,比如大的分布式的应用的会话数据的保存等,每次使用Memcache进行数据的操作都必须依赖于Memcache提供的API,对象的创建,方法的调用等,虽然就几个API,使用起来也挺方便的,但再没有像使用数组这么方便来使用你的Memcache了.

At PHPClasses:http://www.phpclasses.org/browse/package/4071.html

在PHP5里,可以方便的帮我们实现了(基于SPL).几小时的工作,可能有些小BUG,欢迎反馈.:)

/** * mem.class.php -- Class used to access memcache server as array. * * Written by roast (roast_AT_php_DOT_net). * * Feel free to email me with questions/bugs. * If you find this useful, would be great to hear from you. * * version 1.0 - * * Changes: *  - First release. * * Example: * *    include("mem.class.php"); * *    //global variable $_MEM * *    $_MEM['dd'] = "roast";  //memcache::set *    unset($_MEM['dd']);     //memcache::delete * *    var_dump($_MEM['dd']); * * Notes: *  - Protect keys of memcache: _host/_port/_compress/_expire. *  - PHP version 5.0+ */         class _MEM implements ArrayAccess{    private $_data = array();           private $_handler = false;          public  $_host;         public  $_port = 11211;         public  $_compress = false;         public  $_expire = 30;              public function __construct($host,$port = 11211)    {        $this->_host = $host;        $this->_port = $port;        $this->_handler = new Memcache;              if (!$this->_handler->connect($host,$port))            $this->_handler = false;    }               public function offsetExists($offset) {}            public function offsetUnset($offset)    {        $this->_handler->delete($offset);        unset($this->_data[$offset]);    }           public function offsetGet($offset)    {        if (!$this->_handler)            return false;                    echo 'get';        if (isset($this->_data[$offset]))            return $this->_data[$offset];        else            return $this->_handler->get($offset);    }           public function offsetSet($offset, $value)    {        if (!$this->_handler)            return false;               switch ($offset)        {            case '_host':       $this->_host = $value;  break;            case '_port':       $this->_port = $value;  break;            case '_expire':     $this->_expire = $value;break;            case '_compress':   $this->_host = $value;  break;            default:                if (emptyempty($value) && $value != '0')                    $this->_handler->delete($offset);                else                    $this->_handler->set($offset,$value,$this->_compress,$this->_expire);        }         $this->_data[$offest] = $value;    }}$_MEM = new _MEM('10.210.71.51');举个小例子:

include_once('mem.class.php')  ;        $_MEM['dd'] = "roast";unset($_MEM['dd']);               //delete a memcache valuevar_dump($_MEM['dd']);                  echo $_MEM->_host;$_MEM['_host'] = '192.168.1.1';   //set the memcache server hostecho $_MEM->_host;       $_MEM['roast'] = '张立冰';$memcache = new Memcache;$memcache->connect('10.210.71.51', 11211) or die ("Could not connect");var_dump($memcache->get('roast'));

At PHPClasses:http://www.phpclasses.org/browse/package/4071.html

在PHP5里,可以方便的帮我们实现了(基于SPL).几小时的工作,可能有些小BUG,欢迎反馈.:)

/** * mem.class.php -- Class used to access memcache server as array. * * Written by roast (roast_AT_php_DOT_net). * * Feel free to email me with questions/bugs. * If you find this useful, would be great to hear from you. * * version 1.0 - * * Changes: *  - First release. * * Example: * *    include("mem.class.php"); * *    //global variable $_MEM * *    $_MEM['dd'] = "roast";  //memcache::set *    unset($_MEM['dd']);     //memcache::delete * *    var_dump($_MEM['dd']); * * Notes: *  - Protect keys of memcache: _host/_port/_compress/_expire. *  - PHP version 5.0+ */         class _MEM implements ArrayAccess{    private $_data = array();           private $_handler = false;          public  $_host;         public  $_port = 11211;         public  $_compress = false;         public  $_expire = 30;              public function __construct($host,$port = 11211)    {        $this->_host = $host;        $this->_port = $port;        $this->_handler = new Memcache;              if (!$this->_handler->connect($host,$port))            $this->_handler = false;    }               public function offsetExists($offset) {}            public function offsetUnset($offset)    {        $this->_handler->delete($offset);        unset($this->_data[$offset]);    }           public function offsetGet($offset)    {        if (!$this->_handler)            return false;                    echo 'get';        if (isset($this->_data[$offset]))            return $this->_data[$offset];        else            return $this->_handler->get($offset);    }           public function offsetSet($offset, $value)    {        if (!$this->_handler)            return false;               switch ($offset)        {            case '_host':       $this->_host = $value;  break;            case '_port':       $this->_port = $value;  break;            case '_expire':     $this->_expire = $value;break;            case '_compress':   $this->_host = $value;  break;            default:                if (emptyempty($value) && $value != '0')                    $this->_handler->delete($offset);                else                    $this->_handler->set($offset,$value,$this->_compress,$this->_expire);        }         $this->_data[$offest] = $value;    }}$_MEM = new _MEM('10.210.71.51');举个小例子:

include_once('mem.class.php')  ;        $_MEM['dd'] = "roast";unset($_MEM['dd']);               //delete a memcache valuevar_dump($_MEM['dd']);                  echo $_MEM->_host;$_MEM['_host'] = '192.168.1.1';   //set the memcache server hostecho $_MEM->_host;       $_MEM['roast'] = '张立冰';$memcache = new Memcache;$memcache->connect('10.210.71.51', 11211) or die ("Could not connect");var_dump($memcache->get('roast'));




欢迎光临 站长论坛 (http://www.tzlink.com/bbs/) Powered by Discuz! X3.2