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

Yii 2 緩存機制全景指南:組件選型、配置實戰與進階模式

     編輯:PHP 相關知識

緩存組件總覽

Yii 2 在 yii\caching 命名空間提供統一介面 Cache,所有具體驅動繼承自 Cache,業務代碼零修改即可切換後端。

組件類底層存儲適用場景依賴擴展
ApcCacheAPCu單機高性能、OpCode 緩存共存apcu
DbCache資料庫表 (預設 SQLite)無額外服務、數據持久化需求PDO
FileCache文件系統大塊數據、頁面緩存、跨部署簡單無
MemCacheMemcached分佈式、高併發、會話共享memcached
RedisCache (yii2-redis)Redis豐富數據結構、發布訂閱、持久化redis + yii2-redis
XCacheCacheXCache舊項目兼容xcache
ZendDataCacheZend Server Data CacheZend Server 環境Zend Server
DummyCache空實現開發/測試環境禁用緩存無

配置範例:Memcached 叢集

// config/main.php
'components' => [
    'cache' => [
        'class' => 'yii\caching\MemCache',
        'servers' => [
            ['host' => '10.0.1.10', 'port' => 11211, 'weight' => 60],
            ['host' => '10.0.1.11', 'port' => 11211, 'weight' => 40],
        ],
        'keyPrefix' => 'myapp_', // 多應用隔離
    ],
],

三大緩存層級實戰

1. 數據緩存:鍵值存取

$cache = Yii::$app->cache;
// 寫入,30 秒過期
$cache->set('user:1001', $userProfile, 30);
// 讀取
$profile = $cache->get('user:1001');
if ($profile === false) {
    $profile = $this->fetchFromDb(1001);
    $cache->set('user:1001', $profile, 30);
}
// 批量讀取 (MemCache/Redis 支援原生 mget)
$profiles = $cache->mget(['user:1001', 'user:1002']);
// 刪除
$cache->delete('user:1001');
// 清空 (謹慎!影響所有應用)
$cache->flush();

2. 片段緩存:視圖局部緩存

<?php if ($this->beginCache('article-'.$model->id, [
    'duration' => 3600,
    'dependency' => [
        'class' => 'yii\caching\DbDependency',
        'sql' => 'SELECT MAX(updated_at) FROM article WHERE id = '.$model->id,
    ],
    'variations' => [Yii::$app->language], // 按語言區分
])): ?>
    <div class="article">
        <h1><?= $model->title ?></h1>
        <div><?= $model->content ?></div>
    </div>
<?php $this->endCache(); ?>

支援嵌套:外層緩存整頁佈局,內層緩存評論列表,內層過期不影響外層有效數據。

3. 頁面緩存:動作過濾器

public function behaviors() {
    return [
        'pageCache' => [
            'class' => 'yii\filters\PageCache',
            'only' => ['index', 'view'],
            'duration' => 600,
            'variations' => [
                Yii::$app->language,
                Yii::$app->request->get('page'),
            ],
            'dependency' => [
                'class' => 'yii\caching\DbDependency',
                'sql' => 'SELECT MAX(updated_at) FROM post',
            ],
        ],
    ];
}

進階特性

  • 緩存依賴:FileDependency、DbDependency、ExpressionDependency、ChainedDependency 實現智能失效。
  • 動態內容:$this->renderDynamic('renderUserPanel') 在片段/頁面緩存中插入實時渲染區塊(如用戶名、購物車數量)。
  • 數組式訪問:Yii::$app->cache['key'] = $value / $value = Yii::$app->cache['key'],得益於 ArrayAccess 實現。

選型建議

  1. 單機、中小流量:FileCache 或 ApcCache。
  2. 多機、高併發、會話共享:MemCache。
  3. 需要複雜數據結構、排行榜、發布訂閱、持久化:RedisCache (via yiisoft/yii2-redis)。
  4. 開發環境:DummyCache 避免干擾調試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved