作者:张立冰
出处: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 value
var_dump($_MEM['dd']);                 
 
echo $_MEM->_host;
$_MEM['_host'] = '192.168.1.1';   //set the memcache server host
echo $_MEM->_host;      
 
$_MEM['roast'] = '张立冰';
$memcache = new Memcache;
$memcache->connect('10.210.71.51', 11211) or die ("Could not connect");
var_dump($memcache->get('roast'));

您可能还喜欢

7 Responses to “PHP5 像使用数组一样使用Memcache”

  1. xddxz Says:

    太专业了…. 还有那个 svn的地址能不能发给我到 163.com ,我连不上。

  2. xddxz Says:

    试一下看支不支持html

  3. libing Says:

    什么意思啊?发给你到163.com?

  4. jdormmt Says:

    cool site for my mind its very goodPlease, send your abuse here!!! send.your.abuse.here@gmail.com

  5. bw Says:

    不错,要是php能把memcache内置就好了

  6. libing Says:

    PHP的一些扩展(APC、EA、XCACHE)等可以做差不多的memcache的工作,但是不能做分布式……

  7. 征途资料站 Says:

    不错不错记录/分享/…… » Blog Archive » PHP5 像使用数组一样使用Memcache

Leave a Reply