在php中使用memcached是為了提升網(wǎng)站性能并減少數(shù)據(jù)庫壓力。首先,安裝memcached擴展需依賴libmemcached庫,在linux系統(tǒng)下用apt-get安裝,macos用brew安裝,并在php.ini中添加extension=memcached.so后重啟服務;其次,基本使用包括連接服務器、設置緩存(set)、獲取緩存(get)和刪除緩存(delete),支持多key操作提高效率;最后,分布式環(huán)境下可配置多個節(jié)點,采用一致性哈希算法分配key,并通過調整權重控制流量分布,同時結合主動更新或懶更新策略處理緩存失效問題。
在PHP中使用Memcached,主要是為了提升網(wǎng)站性能,減少數(shù)據(jù)庫壓力。尤其是面對高并發(fā)場景時,通過Memcached緩存熱點數(shù)據(jù)能顯著提高響應速度。關鍵在于如何配置和使用它,尤其是在分布式環(huán)境下。
安裝Memcached擴展
要使用Memcached,首先要確保你的PHP環(huán)境中已經安裝了memcached擴展。這個擴展依賴于libmemcached庫,所以安裝過程比簡單的PECL模塊略復雜一點。
- linux系統(tǒng)下可以通過包管理器安裝:
sudo apt-get install php-memcached
- Macos可以用brew:
brew install libmemcached pecl install memcached
安裝完成后記得在php.ini中添加:
立即學習“PHP免費學習筆記(深入)”;
extension=memcached.so
重啟服務后用phpinfo()檢查是否生效。
基本使用方法
連接Memcached服務器是第一步。你可以連接單個或多個節(jié)點。基本操作包括設置、獲取、刪除緩存項。
示例代碼如下:
$memcached = new Memcached(); $memcached->addServer('127.0.0.1', 11211); // 設置緩存 $memcached->set('user_123', ['name' => '張三', 'age' => 25], 3600); // 獲取緩存 $user = $memcached->get('user_123'); // 刪除緩存 $memcached->delete('user_123');
注意幾個點:
- set的第三個參數(shù)是過期時間,單位是秒。
- 如果key不存在,get返回false。
- 可以一次操作多個key(比如getMulti),效率更高。
分布式緩存配置技巧
當你的應用部署在多臺服務器上時,Memcached可以作為共享緩存層來使用。這時候需要配置多個Memcached節(jié)點,并合理設置負載策略。
例如:
$servers = [ ['192.168.1.10', 11211, 33], ['192.168.1.11', 11211, 33], ['192.168.1.12', 11211, 34] ]; $memcached = new Memcached(); $memcached->addServers($servers);
這里有幾個建議:
- 使用一致性哈希算法分配key到不同節(jié)點:$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
- 每個節(jié)點的權重可以不一樣,用來控制流量分布。
- 節(jié)點之間不通信,適合讀多寫少的場景。
如果其中一臺服務器宕機,Memcached會自動跳過它,但緩存穿透問題需要你自己處理。
緩存失效與更新策略
緩存不是永久的,設置合適的過期時間很重要。一般有幾種方式:
- 固定過期時間,比如文章詳情緩存一小時。
- 主動更新,在數(shù)據(jù)變更時清除舊緩存。
- 使用“懶更新”策略,緩存失效后重新生成。
舉個例子:用戶修改了資料,你應該主動刪除對應緩存:
$memcached->delete('user_'.$userId);
這樣下次訪問就會重新加載最新數(shù)據(jù),避免臟讀。
另外,對于一些頻繁查詢又不常變的數(shù)據(jù),比如城市列表、分類信息等,非常適合放在緩存里,能省不少數(shù)據(jù)庫資源。
基本上就這些。Memcached用起來不難,但要真正發(fā)揮它的作用,得結合業(yè)務場景做合理設計。比如什么時候緩存、怎么分片、如何應對緩存擊穿等問題,都需要根據(jù)實際情況調整策略。