当前位置:首页 > PHP教程 > php高级应用 > 列表

emlog中使用memcache缓存配置修改方法

发布:smiling 来源: PHP粉丝网  添加日期:2014-06-17 09:09:31 浏览: 评论:0 

emlog使用的是文件缓存了,不管文件缓存多好也好不过memcache缓存了,关于memcache缓存优于文件缓存我们就不介绍了,下面简单的看看配置方法吧.

这次只是简单的HACK emlog cache程序,使用memcache缓存,毕竟memcache缓存在内存, 文件缓存在硬盘(要看I/O的性能),一般来说内存的性能大于硬盘,所以一般来说memcache缓存优于文件缓存.

memcache相对于文件缓存的优点:

1、读写性能优异,特别是高并发时和文件缓存比有明显优势.

2、memcached组建支持集群,并且是自动管理负载均衡.

注意:memcache的原理是内存分块,单个item大于1M的数据存memcache和读取速度可能有点慢.

具体的情况这边我这里就不测试了,大家可以帮忙测试看看.

1、替换文件缓存为memcache缓存

2、去除文件缓存写入和读取

注意:虽然不涉及数据库操作,但是还是请在修改前备份数据.

1、首先添加memcache类文件Mcache.php,放在include/lib文件夹下,服务器地址和端口地址在该文件中,请你自己配置,代码如下:

  1. /**   
  2.  * 此类为单例模式,取得实例方法: $cache = MCache::getInstance(); 
  3.  * @author Star.Yu <vip@myxzy.com>  
  4.  * @date 2014.5.25 
  5.  * 
  6.  */ 
  7. class MCache{ 
  8.  private static $_instance
  9.  private static $_connect_type = ''
  10.  private $_memcache
  11.  
  12.  /** 
  13.   * 私有化构造函数,禁止使用关键字new来实例Mcache类 
  14.   */ 
  15.  private function __construct() { 
  16.   if (!class_exists('Memcache')) { 
  17.    throw new Exception('Class Memcache not exists'); 
  18.   }  
  19.   $conn = self::$_connect_type
  20.   $this->_memcache = new Memcache(); 
  21.   $this->_memcache->$conn('localhost''11211'); 
  22.  } 
  23.  
  24.  /** 
  25.   * 克隆私有化,禁止克隆实例 
  26.   */ 
  27.  private function __clone() {} 
  28.  
  29.  /** 
  30.   * 类入口,通过此静态方法对类进行实例化 
  31.   */ 
  32.  public static function getInstance($type = 'connect'){ 
  33.   self::$_connect_type = ($type == 'connect') ? $type : 'pconnect'
  34.   if (!self::$_instance instanceof self) { 
  35.    self::$_instance = new self(); 
  36.   } 
  37.   return self::$_instance
  38.  } 
  39.  
  40.  /** 
  41.   * 把数据添加到缓存 
  42.   * @param string $key 缓存的key 
  43.   * @param string|array|int... $value 缓存的数据 
  44.   * @param int $flag  使用zlib MEMCACHE_COMPRESSED 
  45.   * @param int $expire_time  缓存时间 
  46.   */ 
  47.  public function set($key$value,$flag = 0 ,$expire_t(www.111cn.net)ime = 0){ 
  48.    $this->_memcache->set($key$value$flag$expire_time);    
  49.  } 
  50.  
  51.  /** 
  52.   * 替换缓存数据 
  53.   * @param string $key 缓存的key 
  54.   * @param string|array|int... $value 缓存的数据 
  55.   * @param int $flag  使用zlib MEMCACHE_COMPRESSED 
  56.   * @param int $expire_time  缓存时间 
  57.   */ 
  58.  public function replace($key$value,$flag = 0 , $expire_time = 0){ 
  59.    $this->_memcache->replace($key$value$flag$expire_time);    
  60.  } 
  61.  
  62.  /** 
  63.   * 从缓存读取数据 
  64.   * @param string|array|int... $key 
  65.   */ 
  66.  public function get($key){ 
  67.   return $this->_memcache->get($key);  
  68.  } 
  69.  
  70.  /** 
  71.   * 从缓存删除数据 
  72.   * @param string|array|int... $key 
  73.   */ 
  74.  public function del($key,$expire_time = 0){ 
  75.   $this->_memcache->delete($key$expire_time);   
  76.  } 
  77.  
  78.  public function close(){ 
  79.  return $this->_memcache->close();  
  80.  } 

2、修改include/lib/cache.php,添加实例,第29行修改为如下代码:

  1. private function __construct() { 
  2.   $this->db = Database::getInstance(); 
  3.   $this->memcache = MCache::getInstance(); 
  4.  } 3、修改include/lib/cache.php的读写memcache缓存,大概507行下面的cacheWrite和readCache函数修改为 
  5.  /** 
  6.   * 写入缓存 
  7.   */ 
  8.  function cacheWrite ($cacheData$cacheName) { 
  9.   $this->memcache->set($cacheName,$cacheData); 
  10.  } 
  11.  
  12.  /** 
  13.   * 读取缓存文件phpfensi.com
  14.   */ 
  15.  function readCache($cacheName) { 
  16.   if($this->memcache->get($cacheName)===false){call_user_func(array($this'mc_' . $cacheName));} 
  17.   $data = $this->memcache->get($cacheName); 
  18.   $this->{$cacheName.'_cache'} = unserialize($data); 
  19.   return $this->{$cacheName.'_cache'}; 
  20.  } 

到此修改已经完毕,已经缓存了文件缓存到memcache缓存中了,如有什么问题可以留言评论.

卸载方法:如果不想用memcache缓存了,就用原版的cache.php替换掉修改的cache.php,然后删除Mcache.php即可.

Tags: emlog缓存 memcache缓存配置

分享到: