memcached读书笔记二
PS:原创文章,如需转载,请注明出处,谢谢! ????
本文地址:http://flyer0126.iteye.com/blog/ 1751973 ? ?
?
????? 前两天写了 memcached读书笔记一,偏重于理论,今天有时间主要是PHP中对Memcache的使用,闲话少叙,进入正题~
????? PHP中的简单应用:
<?php// 简单测试memcached$mc = new Memcache;$mc->connect('127.0.0.1', 11211);$key = '';$mc->set('key', 'flyer0126');$ret = $mc->get('key');print_r($ret);//输出信息: flyer0126 ?
????? 为了更好的调用,在此封装一下:
<?php/** * 单例模式构造Memcache 操作类 * @author flyer0126 * @since 2012/12 */class mem_cache extends Memcache{static $instance = NULL;private $mem_cache_servers = "127.0.0.1:11211"; // 设置cache的host及port信息private $prefix = 'flyer0126_'; // 设置key的前缀public $is_cache = true; // 设置是否使用cache数据/** * 获取对象实例 * @return [type] [description] */static function get_instance(){if (self::$instance == NULL) {self::$instance = new mem_cache();}return self::$instance;}/** * 构造函数私有化,防止外界调用 */private function __construct(){if (strpos(',', $this->mem_cache_servers)) {$memcached_servers = explode(',', $this->mem_cache_servers);}$memcached_servers = array($this->mem_cache_servers);// 向连接池中添加memcache服务器foreach ($memcached_servers as $key => $value) {list($server, $port) = explode(':', $value);parent::addServer ($server, $port, false);}}/** * 根据key获取cache值 * @param [type] $key [description] * @return [type] [description] */function get($key){if (!$this->is_cache || !strlen($key)) {return false;}$key = $this->hash($key);return parent::get($key);}/** * 设置cache值 * @param [type] $key [description] * @param [type] $value [description] * @param integer $flag [description] * @param integer $expire [description] */function set($key, $value, $flag=0, $expire=0){if (!strlen($key)) {return false;}$key = $this->hash($key);return parent::set($key, $value, $flag, $expire);}/** * 对key进行md5加密 * @param [type] $key [description] * @return [type] [description] */function hash($key){return md5($this->prefix.$key);}/** * 删除对应key的cache值 * @param [type] $key [description] * @return [type] [description] */function delete($key){if (!strlen($key)) {return false;}$key = $this->hash($key);return parent::delete($key);}/** * 删除对应数组key的cache值 * @param [type] $key_ary [description] * @return [type] [description] */function delete_ary($key_ary){if (!is_array($key_ary)) {return false;}foreach ($key_ary as $item) {$this->delete($item);}return true;}}???? 测试一下:
<?php// 测试例子$mc = mem_cache::get_instance();$mc->set('key', 'flyer0126');$ret = $mc->get('key');var_dump($ret); // string(9) "flyer0126"$mc->is_cache = false;$ret1 = $mc->get('key');var_dump($ret1); // bool(false)$mc->is_cache = true;$ret2 = $mc->get('key');var_dump($ret2); // string(9) "flyer0126"$mc->delete('key');$ret2 = $mc->get('key');var_dump($ret2); // bool(false)?
????? Memcache 在PHP中应用更多的是存储数据库查询结果,原理是一致的,在此就不再赘述了~