加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 教程 > 正文

emlog中使用memcache缓存配置修改技巧

发布时间:2022-07-06 11:21:43 所属栏目:教程 来源:互联网
导读:emlog使用的是文件缓存了,不管文件缓存多好也好不过memcache缓存了,关于memcache缓存优于文件缓存我们就不介绍了,下面简单的看看配置方法吧. 这次只是简单的HACK emlog cache程序,使用memcache缓存,毕竟memcache缓存在内存, 文件缓存在硬盘(要看I/O的性能),
  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文件夹下,服务器地址和端口地址在该文件中,请你自己配置,代码如下:
 
  /**   
   * 此类为单例模式,取得实例方法: $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_t(www.111cn.net)ime = 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,添加实例,第29行修改为如下代码:
 
  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);
   }
   
   /**
    * 读取缓存文件phpfensi.com
    */
   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即可.

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读