開發調試、部署上線、數據異動後常需清理 Yii 應用緩存。本文提供最輕量的「前端按鈕 + AJAX + 後端 Action」方案,無需額外擴展,即插即用。
public function actionClear() {
// 清空所有應用緩存組件
Yii::app()->cache->flush();
// 若有多個緩存組件(如 cache、cache2),逐個清理
// Yii::app()->cache2->flush();
echo 'OK';
}
關鍵點:Yii::app()->cache 返回配置的緩存組件(CFileCache/CMemCache/CRedisCache 等),flush() 為統一介面,會清空該組件所有數據。
<button id="btn-clear-cache" class="btn btn-danger">清空緩存</button>
<script>
$('#btn-clear-cache').click(function() {
var $btn = $(this).prop('disabled', true).text('清理中...');
$.get('= Yii::app()->createUrl('site/clear') ?>', { _: Date.now() })
.done(function() {
alert('緩存清理成功!');
location.reload(); // 可選:刷新頁面驗證
})
.fail(function() {
alert('清理失敗,請檢查日誌');
})
.always(function() {
$btn.prop('disabled', false).text('清空緩存');
});
});
</script>
public function actionClear() {
// 僅允許超級管理員或特定 IP
if (!Yii::app()->user->checkAccess('admin.clearCache')) {
throw new CHttpException(403, '權限不足');
}
Yii::app()->cache->flush();
echo 'OK';
}
若使用 CCache 衍生類支援標籤(如 yii2-redis、yii2-technode-cache),可精準清理:
// 按鍵清理
Yii::app()->cache->delete('product_list_123');
// 按標籤清理(需組件支援)
Yii::app()->cache->invalidateTags(['product', 'category']);
// 清理文件緩存目錄(CFileCache)
// protected/runtime/cache/ 下刪除對應 .bin 文件
| 組件 | flush() 行為 | 備註 |
|---|---|---|
| CFileCache | 刪除 cachePath 下所有文件 | 預設 protected/runtime/cache |
| CMemCache | 發送 flush_all 命令 | 影響整個 Memcached 實例,謹慎使用 |
| CRedisCache | 執行 FLUSHDB (當前 DB) | 若共用 Redis 需用前綴隔離 |
| CDbCache | TRUNCATE 緩存表 | 需資料庫權限 |
| CApcCache | apc_clear_cache() | 僅限 CLI/單進程模式有效 |
# 部署腳本片段 php yii cache/flush-all # Yii2 控制台命令 # 或 curl -X POST "https://api.example.com/site/clear?token=SECRET"
這套方案代碼量極小、零依賴、兼容所有緩存組件,適合快速接入現有 Yii 1.x/2.x 專案。生產環境務必加上權限校驗與操作審計日誌。