PHP中如何使用Memcached?分布式緩存配置

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?分布式緩存配置

在PHP中使用Memcached,主要是為了提升網(wǎng)站性能,減少數(shù)據(jù)庫壓力。尤其是面對高并發(fā)場景時,通過Memcached緩存熱點數(shù)據(jù)能顯著提高響應速度。關鍵在于如何配置和使用它,尤其是在分布式環(huán)境下。

PHP中如何使用Memcached?分布式緩存配置


安裝Memcached擴展

要使用Memcached,首先要確保你的PHP環(huán)境中已經安裝了memcached擴展。這個擴展依賴于libmemcached庫,所以安裝過程比簡單的PECL模塊略復雜一點。

PHP中如何使用Memcached?分布式緩存配置

  • linux系統(tǒng)下可以通過包管理器安裝:
    sudo apt-get install php-memcached
  • Macos可以用brew:
    brew install libmemcached pecl install memcached

安裝完成后記得在php.ini中添加:

立即學習PHP免費學習筆記(深入)”;

extension=memcached.so

重啟服務后用phpinfo()檢查是否生效。

PHP中如何使用Memcached?分布式緩存配置


基本使用方法

連接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ù)實際情況調整策略。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享