php分散式部署實例詳解
普通的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',
如下圖所示:
- 附件1:CacheMemcache.class.php
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- defined('THINK_PATH') or exit(); /** * Memcache缓存驱动 * @category Extend * @package Extend * @subpackage Driver.Cache * @author liu21st <liu21st@gmail.com> */ 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 ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: richievoe <richievoe@163.com> // +---------------------------------------------------------------------- /** * 自定义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; } } ?>
以上是php分散式部署實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
