yii2.0でのredisの使用
3477 ワード
プロジェクトにredisキャッシュ1を追加します.composerインストールredis
2.プロジェクトプロファイルの設定:cacheとリンクredisサーバcommon/config/mainを導入する.php:
common/config/main-local.php:redisサーバへのリンク
3.キャッシュの使用例
4.キャッシュa.クリアキャッシュのクラスを作成する
b.キャッシュをクリアするインタフェースの作成
c.バックエンド追加、編集、削除時にキャッシュをクリア
注意:キャッシュがクリアできない場合は、まずキー名が同じかどうか、同じredisサーバに接続されているかどうか、このmodelでクリアされているかどうかを確認します.
composer require "yiisoft/yii2-redis"
2.プロジェクトプロファイルの設定:cacheとリンクredisサーバcommon/config/mainを導入する.php:
'components' => [
'cache' => [
// 'class' => 'yii\caching\FileCache',
'class' => \yii\redis\Cache::class,
'redis' => 'redis'
],
]
common/config/main-local.php:redisサーバへのリンク
'redis' => [
'class' => 'yii\redis\Connection',
'hostname' => '10.110.XX.XX',//
'port' => 6379,
'database' => 0,
],
3.キャッシュの使用例
public static function getMenus($templateEnum)
{
return \Yii::$app->cache->getOrSet(YII_ENV.':templateMenu:'.$templateEnum, function () use ($templateEnum) {
$menus = TemplateMenu::find()->select(['menu_id', 'template_enum', 'sort'])
->where(['template_enum' => $templateEnum])
->orderBy('sort')
->with('menu')
->asArray()
->all();
if (empty($menus)) {
throw new NotFoundHttpException(' ');
}
return get_tree($menus);
},3600 * 24);
}
4.キャッシュa.クリアキャッシュのクラスを作成する
'clear',
ActiveRecord::EVENT_AFTER_INSERT => 'clear',
ActiveRecord::EVENT_AFTER_UPDATE => 'clear'
];
}
/**
*
* @param Event $event
*/
public function clear(Event $event)
{
if ($event->sender instanceof ShouldClearCache) {
$keys = $event->sender->cacheKeys();
if (!is_array($keys)) {
$keys = [$keys];
}
if (!empty($keys)) {
foreach ($keys as $key) {
\Yii::$app->cache->delete($key);
}
}
}
}
}
b.キャッシュをクリアするインタフェースの作成
c.バックエンド追加、編集、削除時にキャッシュをクリア
:model implements ShouldClearCach
public function cacheKeys()
{
return [
YII_ENV.':templateMenu:'.$this->template_enum, //
];
}
public function behaviors()
{
return array_merge(parent::behaviors(), [
'class' => CacheClearBehavior::class,
]);
}
注意:キャッシュがクリアできない場合は、まずキー名が同じかどうか、同じredisサーバに接続されているかどうか、このmodelでクリアされているかどうかを確認します.