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

PHP Redis 封裝類最佳實踐:主從集群、連接池、事務、序列化全支持

     編輯:PHP 相關知識

Redis 作為高性能鍵值存儲,廣泛用於緩存、會話、隊列、排行榜等場景。本文提供一個生產就緒的 RedisCluster 封裝類,支援主從讀寫分離、長連接複用、透明故障切換、事務管道、多種數據結構操作,並通過魔術方法暴露底層 Redis 實例滿足擴展需求。

🏗️ 類架構設計


// 配置示例
$redis = new RedisCluster(true); // 啟用集群模式

// 主節點(寫)
$redis->connect(['host' => '10.0.0.1', 'port' => 6379], true);

// 從節點(讀,可多個)
$redis->connect(['host' => '10.0.0.2', 'port' => 6379], false);
$redis->connect(['host' => '10.0.0.3', 'port' => 6379], false);

// 內部使用 pconnect 持久連接,進程生命周期內複用
// 關閉:$redis->close(2) 關閉所有

2. 讀寫分離自動路由


// 寫入自動序列化陣列/對象
$redis->hset('user:1', 'profile', ['name' => 'Tom', 'age' => 25]);
// 讀取自動反序列化(可關閉)
$profile = $redis->hget('user:1', 'profile'); // 返回陣列
$raw = $redis->hget('user:1', 'profile', false); // 返回序列化字符串

4. 事務管道


// SETNX + 過期時間實現鎖
if ($redis->setnx('lock:order:123', 'worker1')) {
    $redis->expire('lock:order:123', 10); // 10秒自動釋放
    // 業務邏輯
    $redis->remove('lock:order:123');
}

🧪 完整測試用例


// 取消註釋啟用
public function __call($name, $arguments) {
    // 默認走 Master,可根據方法名判斷讀寫
    $redis = $this->getRedis(true);
    if (method_exists($redis, $name)) {
        return call_user_func_array([$redis, $name], $arguments);
    }
    throw new BadMethodCallException("Method $name not exists");
}

啟用後可直接調用 $redis->zAdd()、$redis->geoAdd() 等未封裝方法,保持靈活性。

這個封裝類在多個千萬級日活項目中穩定運行,核心原則:接口極簡、職責單一、異常安全、擴展開放。根據團隊技術棧,可進一步封裝為 Laravel Facade、Symfony Service、ThinkPHP 驅動等框架集成形式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved