首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 整合 Memcached:從安裝配置到實戰緩存數據庫查詢

     編輯:PHP 綜合知識

Memcached 核心概念

  • 高性能分布式記憶體緩存系統
  • Key-Value 存儲,數據駐留內存,極速讀寫
  • 非持久化:重啟數據丟失,適合緩存層

服務端安裝

# 依賴 libevent
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
tar xzf libevent-*.tar.gz && cd libevent-* && ./configure --prefix=/usr && make && make install

# Memcached
wget https://memcached.org/latest -O memcached.tar.gz
tar xzf memcached.tar.gz && cd memcached-*
./configure --prefix=/usr && make && make install

啟動守護進程

/usr/bin/memcached -d -m 128 -l 192.168.1.1 -p 11211 -u www-data
# -d 背景運行 -m 內存MB -l 監聽IP -p 端口 -u 用戶

PHP 客戶端選擇

方案優點缺點
php-memcached 擴展 (libmemcached)性能最佳、功能完整需編譯安裝
php-memcache 擴展較輕量功能較少、已停止維護
純 PHP 客戶端 (php-memcached-client)免編譯、部署簡單性能較差

本文示範純 PHP 客戶端(Memcached.php)。

基礎操作封裝

require_once 'Memcached.php';

$mc = new Memcached([
    'servers' => ['192.168.1.1:11211'],
    'compress_threshold' => 10240,
    'persistent' => false,
]);

$key = 'mykey';
$mc->add($key, 'Hello Memcached');
var_dump($mc->get($key));

$mc->replace($key, ['arr'=>123]);
var_dump($mc->get($key));

$mc->delete($key);
var_dump($mc->get($key)); // false

實戰:緩存數據庫查詢結果

$sql = 'SELECT * FROM users WHERE status=1';
$key = md5($sql);

if (!($data = $mc->get($key))) {
    echo "從 MySQL 讀取\n";
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
    $data = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    $mc->add($key, $data, 300); // 緩存 5 分鐘
} else {
    echo "從 Memcached 讀取\n";
}
print_r($data);

進階應用:Session 共享

  • 將 Session 存入 Memcached,解決多 Server Session 同步
  • 配置 session.save_handler=memcached、session.save_path="192.168.1.1:11211"
  • 注意 Session 鎖機制與並發性能

最佳實踐提醒

  • Key 設計:加入業務前綴防衝突,如 user:123:profile
  • 緩存穿透:對不存在 Key 緩存空值或佈隆過濾器
  • 緩存雪崩:過期時間加隨機抖動
  • 監控:關注命中率、內存使用、淘汰率
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved