ThinkPHP新项目完成遍布式布署(网站群集)

ThinkPHP新项目完成遍布式布署(网站群集)

时间: 2020-04-11 阅读文章: 30476   回到


一般的Web开发设计,常见的方式便是客户登陆以后,登陆情况信息内容储存在Session中,客户一些常见的热数据信息储存在文档缓存文件中,客户提交的配件信息内容储存在Web网络服务器的某一文件目录上。这类方法针对一一样的Web运用,应用很便捷,彻底可以担任。可是针对分布式系统的公司级网站,就应对不上了。必须选用Web群集完成负荷平衡。 应用Web群集方法布署以后,主要调节的便是客户情况信息内容与配件信息内容。客户情况不可以再储存到Session中,缓存文件都不可用当地Web网络服务器的文档缓存文件,及其配件,都不能储存在Web网络服务器到了。由于要确保群集里边的每个Web网络服务器,情况彻底一致。因而,必须将客户情况、缓存文件等储存到专用型的缓存文件网络服务器,例如Memcache。配件必须储存到云储存中,例如七牛云储存、阿里巴巴云储存、腾迅云储存等。 文中以ThinkPHP开发设计架构为例子,表明怎样设定,可以将Session、缓存文件等储存到Memcache缓存文件网络服务器上。   免费下载缓存文件的Memcache解决类,放进Thinkphp\Extend\Driver\Cache文件目录中;免费下载Session的Memcache解决类,放进Thinkphp\Extend\Driver\Session文件目录中,以下图所显示:   改动配备文档,调节Session与缓存文件,都纪录到Memcache网络服务器上。开启ThinkPHP\Conf\convention.php,提升配备项:     /* Memcache缓存文件设定 */     'MEMCACHE_HOST'         = '192.168.202.20',     'MEMCACHE_PORT'         = 11211, 改动数据信息缓存文件为Memcache:     'DATA_CACHE_TYPE'       = 'Memcache', 改动Session为Memcache:     'SESSION_TYPE'          = 'Memcache', 以下图所显示:
由于云储存各种较为多,配件储存到云储存上,也不再过多阐释,主要参数各云储存出示的sdk就可以。历经之上改动,便可以将Web网络服务器开展遍布式布署了。 配件1:CacheMemcache.class.php ?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2012 / +---------------------------------------------------------------------- // | Licensed ( licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st liu21st // +----------------------------------------------------------------------   defined('THINK_PATH') or exit();  * Memcache缓存文件驱动器  * @category   Extend  * @package  Extend  * @subpackage  Driver.Cache  * @author    liu21st liu21st  */ class CacheMemcache extends Cache {       /**      * 构架涵数      * @param array $options 缓存文件主要参数      * @access public      */     function __construct($options=array()) {         if ( !extension_loaded('memcache') ) {             throw_exception(L('_NOT_SUPPERT_').':memcache');         }           $options = array_merge(array (             'host'        =   C('MEMCACHE_HOST') ? C('MEMCACHE_HOST') : '127.0.0.1',             'port'        =   C('MEMCACHE_PORT') ? C('MEMCACHE_PORT') : 11211,             'timeout'     =   C('DATA_CACHE_TIMEOUT') ? C('DATA_CACHE_TIMEOUT') : false,             'persistent'  =   false,         ),$options);           $this- options      =   $options;         $this- options['expire'] =  isset($options['expire'])?  $options['expire']  :   C('DATA_CACHE_TIME');         $this- options['prefix'] =  isset($options['prefix'])?  $options['prefix']  :   C('DATA_CACHE_PREFIX');                $this- options['length'] =  isset($options['length'])?  $options['length']  :   0;                $func               =   $options['persistent'] ? 'pconnect' : 'connect';         $this- handler      =   new Memcache;         $options['timeout'] === false ?             $this- handler- $func($options['host'], $options['port']) :             $this- handler- $func($options['host'], $options['port'], $options['timeout']);     }       /**      * 载入缓存文件      * @access public      * @param string $name 缓存文件自变量名      * @return mixed      */     public function get($name) {         N('cache_read',1);         return $this- handler- get($this- options['prefix'].$name);     }       /**      * 载入缓存文件      * @access public      * @param string $name 缓存文件自变量名      * @param mixed $value  储存数据信息      * @param integer $expire  合理時间(秒)      * @return boolen      */     public function set($name, $value, $expire = null) {         N('cache_write',1);         if(is_null($expire)) {             $expire  =  $this- options['expire'];         }         $name   =   $this- options['prefix'].$name;         if($this- handler- set($name, $value, 0, $expire)) {             if($this- options['length'] 0) {                 // 纪录缓存文件序列                 $this- queue($name);             }             return true;         }         return false;     }       /**      * 删掉缓存文件      * @access public      * @param string $name 缓存文件自变量名      * @return boolen      */     public function rm($name, $ttl = false) {         $name   =   $this- options['prefix'].$name;         return $ttl === false ?             $this- handler- delete($name) :             $this- handler- delete($name, $ttl);     }       /**      * 消除缓存文件      * @access public      * @return boolen      */     public function clear() {         return $this- handler- flush();     } 配件2:SessionMemcache.class.php ?php  // +---------------------------------------------------------------------- // |  // +---------------------------------------------------------------------- // | Copyright (c) 2013-  // +---------------------------------------------------------------------- // | Licensed ( licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: richievoe richievoe // +----------------------------------------------------------------------     /**      * 自定Memcache来储存session      */ Class SessionMemcache{     //memcache目标     private $mem;     //SESSION合理時间     private $expire;     //外界启用的涵数     public function execute(){         session_set_save_handler(             array( $this,'open'),              array( $this,'close'),              array( $this,'read'),              array( $this,'write'),              array( $this,'destroy'),              array( $this,'gc')             );     }     //联接memcached和原始化一些数据信息     public function open($path,$name){         $this- expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') :ini_get('session.gc_maxlifetime');         $this- mem = new Memcache;         return $this- mem- connect(C('MEMCACHE_HOST'), C('MEMCACHE_PORT'));     }     //关掉memcache网络服务器     public function close(){         return $this- mem- close();     }     //载入数据信息     public function read($id){         $id = C('SESSION_PREFIX').$id;         $data = $this- mem- get($id);         return $data ? $data :'';     }     //存进数据信息     public function write($id,$data){         $id = C('SESSION_PREFIX').$id;         //$data = addslashes($data);         return $this- mem- set($id,$data,0,$this- expire);     }     //消毁数据信息     public function destroy($id){         $id = C('SESSION_PREFIX').$id;         return $this- mem- delete($id);     }     //废弃物消毁     public function gc(){         return true;     }   历经之上配备,便可以将客户情况信息内容与缓存文件信息内容储存到Memcache中。可使用负荷平衡网络服务器,来完成规模性群集方法搭建网站。  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://removeh5.cn/jingyan/2787.html