Home > php教程 > PHP源码 > emlog中使用memcache缓存配置修改方法

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

WBOY
Release: 2016-06-08 17:22:05
Original
1908 people have browsed it

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

<script>ec(2);</script>

这次只是简单的HACK emlog cache程序,使用memcache缓存,毕竟memcache缓存在内存, 文件缓存在硬盘(要看I/O的性能),一般来说内存的性能大于硬盘,所以一般来说memcache缓存优于文件缓存。
memcache相对于文件缓存的优点:
1、读写性能优异,特别是高并发时和文件缓存比有明显优势。
2、memcached组建支持集群,并且是自动管理负载均衡

注意:memcache的原理是内存分块,单个item大于1M的数据存memcache和读取速度可能有点慢。
具体的情况这边我这里就不测试了,大家可以帮忙测试看看。

[2014-05-25]memcache 1.0beta
1、替换文件缓存为memcache缓存
2、去除文件缓存写入和读取

注意:虽然不涉及数据库操作,但是还是请在修改前备份数据
1、首先添加memcache类文件Mcache.php,放在include/lib文件夹下,服务器地址和端口地址在该文件中,请你自己配置

 代码如下 复制代码

/** 
 * 此类为单例模式,取得实例方法: $cache = MCache::getInstance();
 * @author Star.Yu
 * @date 2014.5.25
 *
 */
class MCache{
 private static $_instance;
 private static $_connect_type = '';
 private $_memcache;
 
 /**
  * 私有化构造函数,禁止使用关键字new来实例Mcache类
  */
 private function __construct() {
  if (!class_exists('Memcache')) {
   throw new Exception('Class Memcache not exists');
  }
  $conn = self::$_connect_type;
  $this->_memcache = new Memcache();
  $this->_memcache->$conn('localhost', '11211');
 }
 
 /**
  * 克隆私有化,禁止克隆实例
  */
 private function __clone() {}
 
 /**
  * 类入口,通过此静态方法对类进行实例化
  */
 public static function getInstance($type = 'connect'){
  self::$_connect_type = ($type == 'connect') ? $type : 'pconnect';
  if (!self::$_instance instanceof self) {
   self::$_instance = new self();
  }
  return self::$_instance;
 }
 
 /**
  * 把数据添加到缓存
  * @param string $key 缓存的key
  * @param string|array|int... $value 缓存的数据
  * @param int $flag  使用zlib MEMCACHE_COMPRESSED
  * @param int $expire_time  缓存时间
  */
 public function set($key, $value,$flag = 0 ,$expire_time = 0){
   $this->_memcache->set($key, $value, $flag, $expire_time);  
 }

 /**
  * 替换缓存数据
  * @param string $key 缓存的key
  * @param string|array|int... $value 缓存的数据
  * @param int $flag  使用zlib MEMCACHE_COMPRESSED
  * @param int $expire_time  缓存时间
  */
 public function replace($key, $value,$flag = 0 , $expire_time = 0){
   $this->_memcache->replace($key, $value, $flag, $expire_time);  
 }
 
 /**
  * 从缓存读取数据
  * @param string|array|int... $key
  */
 public function get($key){
  return $this->_memcache->get($key);
 }
 
 /**
  * 从缓存删除数据
  * @param string|array|int... $key
  */
 public function del($key,$expire_time = 0){
  $this->_memcache->delete($key, $expire_time); 
 }

 public function close(){
 return $this->_memcache->close();
 }
}

2、修改include/lib/cache.php,添加实例,第28行修改为
 

 代码如下 复制代码

private function __construct() {
  $this->db = Database::getInstance();
  $this->memcache = MCache::getInstance();
 } 3、修改include/lib/cache.php的读写memcache缓存,大概507行下面的cacheWrite和readCache函数修改为
 /**
  * 写入缓存
  */
 function cacheWrite ($cacheData, $cacheName) {
  $this->memcache->set($cacheName,$cacheData);
 }

 /**
  * 读取缓存文件
  */
 function readCache($cacheName) {
  if($this->memcache->get($cacheName)===false){call_user_func(array($this, 'mc_' . $cacheName));}
  $data = $this->memcache->get($cacheName);
  $this->{$cacheName.'_cache'} = unserialize($data);
  return $this->{$cacheName.'_cache'};
 }

到此修改已经完毕,已经缓存了文件缓存到memcache缓存中了,如有什么问题可以留言评论。
卸载方法:如果不想用memcache缓存了,就用原版的cache.php替换掉修改的cache.php,然后删除Mcache.php即可

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template