手机游戏
经典单机
角色扮演
休闲益智
动作冒险
射击枪战
赛车竞速
模拟经营
解密闯关
策略战争
手机软件
时尚购物
体育运动
资讯阅读
教育学习
摄影摄像
生活服务
效率办公
聊天社交
视频盒子
其它软件
新闻资讯
游戏攻略
软件教程
游戏问答
软件资讯
软件技术
叨叨念念
网站技术
技术问答
软件教程
资源资料
原创作品
代码学习
网页设计
网络技术
合集
合集
游戏合集
软件合集
资讯合集
视频合集
首页 > 原创作品 > 原创作品

emlog使用memcache缓存替代文件缓存

作者:星知苑 时间:2014-05-25 08:31:31

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

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

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

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

 

 

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

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

 

[2014-05-25]memcache 1.0beta

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

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

 

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

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

<?php
/**  
 * 此类为单例模式,取得实例方法: $cache = MCache::getInstance();
 * @author Star.Yu <vip@myxzy.com> 
 * @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即可

良心推荐

爆炒江湖厨师培养攻略
非常好玩的养成游戏,让你在这里能够和众多的小伙伴成为最亮丽的美食家,各种美食不仅有很多的原创,也用借鉴现实生活中的各地的美食等,关于在游戏中的厨师的职业相对来说是很多玩家喜欢的,可以让你运用职业技能来赚钱,小编整理一些有关厨师的怎么样培养的攻略还有各种职业技巧发展,让你乐趣无穷。

相关资讯