PHP5 像使用数组一样使用Memcache
三月 13th, 2008
作者:张立冰
出处: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'));

三月 13th, 2008 at 3:23 下午
太专业了…. 还有那个 svn的地址能不能发给我到 163.com ,我连不上。
三月 14th, 2008 at 10:02 上午
试一下看支不支持html
三月 15th, 2008 at 11:50 上午
什么意思啊?发给你到163.com?
四月 1st, 2008 at 3:39 下午
cool site for my mind its very goodPlease, send your abuse here!!! send.your.abuse.here@gmail.com
五月 8th, 2008 at 10:02 上午
不错,要是php能把memcache内置就好了
五月 8th, 2008 at 12:48 下午
PHP的一些扩展(APC、EA、XCACHE)等可以做差不多的memcache的工作,但是不能做分布式……
四月 5th, 2009 at 7:16 下午
不错不错记录/分享/…… » Blog Archive » PHP5 像使用数组一样使用Memcache