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

Yii 框架整合 Memcached 快取配置完整指南

     編輯:PHP 相關知識

Yii 內建 CMemCache 元件支援 Memcached,本文記錄從安裝 Memcached 服務到 Yii 配置、基本操作的完整步驟。

一、安裝與啟動 Memcached (Windows 範例)

> memcached.exe -d install    # 安裝為服務
> memcached.exe -d start      # 啟動服務
# 預設監聽 127.0.0.1:11211

Linux 生產環境建議用套件管理安裝:apt install memcached / yum install memcached,並調整 /etc/memcached.conf 記憶體上限 (-m 256) 與監聽介面。

二、Yii 配置 (protected/config/main.php)

<?php
return [
    // ...
    'components' => [
        // ...
        'memcache' => [
            'class' => 'CMemCache',
            'servers' => [
                [
                    'host' => '127.0.0.1',
                    'port' => 11211,
                    'weight' => 60,
                ],
                [
                    'host' => '127.0.0.1',
                    'port' => 11211,
                    'weight' => 40,
                ],
                // 可加入多台 Server 組成叢集
            ],
            // 可選參數
            'keyPrefix' => 'myapp_',     // 鍵前綴,避免衝突
            'hashKey' => true,           // 鍵過長時自動雜湊
            'serializer' => 'igbinary',  // 需安裝 igbinary 擴充,序列化更快
        ],
    ],
];

三、基本操作 API

操作代碼範例說明
寫入Yii::app()->memcache->set($id, $value, $expire=0)$expire 秒數,0=永不過期
讀取Yii::app()->memcache->get($id)不存在回傳 false
刪除Yii::app()->memcache->delete($id)
檢查存在Yii::app()->memcache->get($id) !== false
遞增/遞減increment($id, $step=1) / decrement($id, $step=1)原子操作,適合計數器
清空所有Yii::app()->memcache->flush()謹慎使用

四、實戰範例:快取資料庫查詢結果

public function getHotArticles($limit = 10) {
    $key = "hot_articles_{$limit}";
    $data = Yii::app()->memcache->get($key);
    
    if ($data === false) {
        $data = Article::model()->published()
            ->orderBy('views DESC')
            ->limit($limit)
            ->findAll();
        Yii::app()->memcache->set($key, $data, 300); // 快存 5 分鐘
    }
    return $data;
}

五、常見坑與建議

  • PHP 擴充套件:需安裝 php-memcached (libmemcached 為底) 或 php-memcache (舊版),前者功能較完整、支援 SASL、Binary Protocol。
  • 序列化:預設 serialize(),大物件建議 igbinary 或 msgpack。
  • Key 設計:加前綴、含版本號 (如 v2:user:123)、避免過長 (>250 bytes)。
  • 失效策略:寫入時同步 delete、或短 TTL + 被動更新、或標記版本號。
  • 監控:stats 指令觀察 get_hits/get_misses、evictions、記憶體使用率。

六、進階:多伺服器一致性雜湊

CMemCache 內建一致性雜湊分發,weight 決定節點權重。新增/移除節點時,只有小部分 Key 會重新分發,減少快取失效風暴。

'servers' => [
    ['host' => '10.0.1.10', 'port' => 11211, 'weight' => 50],
    ['host' => '10.0.1.11', 'port' => 11211, 'weight' => 50],
    ['host' => '10.0.1.12', 'port' => 11211, 'weight' => 30], // 新節點權重較低緩衝
],

配合 ketama 演算法 (libmemcached 預設) 可獲得更平滑的分發。

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