HACK emlog程序教程,操作前请先备份。使用memcached缓存来替代文件缓存,毕竟memcached缓存在内存, 文件缓存在硬盘(要看I/O的性能),一般来说内存的性能大于硬盘,所以一般来说memcached缓存优于文件缓存。
memcache相对于文件缓存的优点:
1、读写性能优异,特别是高并发时和文件缓存比有明显优势。
2、memcached组建支持集群,并且是自动管理负载均衡。
注意:memcached的原理是内存分块,单个item大于1M的数据存memcached和读取速度可能有点慢。
具体的情况这边我这里就不测试了,大家可以帮忙测试看看。
修改include/lib/cache.php文件
1、变量
private $db;
改为
private $db;
private $memcached;
2、修改构造函数
protected function __construct() {
$this->db = Database::getInstance();
}
改为
protected function __construct() {
$this->db = Database::getInstance();
$this->memcached = new Memcached();
$this->memcached->addServer('127.0.0.1','11211');
}
3、修改缓存写入函数
public function cacheWrite($cacheData, $cacheName) {
$cachefile = EMLOG_ROOT . '/content/cache/' . $cacheName . '.php';
$cacheData = "<?php exit;//" . $cacheData;
@ $fp = fopen($cachefile, 'wb') or emMsg('读取缓存失败');
@ fwrite($fp, $cacheData) or emMsg('写入缓存失败,缓存目录 (content/cache) 不可写');
$this->{$cacheName . '_cache'} = null;
fclose($fp);
}
改为
public function cacheWrite($cacheData, $cacheName) {
$this->memcached->set($cacheName, $cacheData, 0);
}
4、修改缓存读取函数
public function readCache($cacheName) {
if ($this->{$cacheName . '_cache'} != null) {
return $this->{$cacheName . '_cache'};
} else {
$cachefile = EMLOG_ROOT . '/content/cache/' . $cacheName . '.php';
// 如果缓存文件不存在则自动生成缓存文件
if (!is_file($cachefile) || filesize($cachefile) <= 0) {
if (method_exists($this, 'mc_' . $cacheName)) {
call_user_func(array($this, 'mc_' . $cacheName));
}
}
if ($fp = fopen($cachefile, 'r')) {
$data = fread($fp, filesize($cachefile));
fclose($fp);
clearstatcache();
$this->{$cacheName . '_cache'} = unserialize(str_replace("<?php exit;//", '', $data));
return $this->{$cacheName . '_cache'};
}
}
}
改为
public function readCache($cacheName) {
if($this->memcached->get($cacheName)===false){
call_user_func(array($this, 'mc_' . $cacheName));
}
return unserialize($this->memcached->get($cacheName));
}
到此修改已经完毕,到后台刷新缓存即可,如有什么问题可以留言评论。
卸载方法:如果不想用memcached缓存了,就用原版的cache.php替换掉修改的cache.php即可。
目前有 0 条评论