Yii-caching
Yii-キャッシング
キャッシングは、アプリケーションのパフォーマンスを向上させる効果的な方法です。 キャッシュメカニズムは、静的データをキャッシュに保存し、要求されたときにキャッシュから取得します。 サーバー側では、キャッシュを使用して、最新のニュースのリストなどの基本データを保存できます。 ページフラグメントまたはWebページ全体を保存することもできます。 クライアント側では、HTTPキャッシュを使用して、最近アクセスしたページをブラウザーキャッシュに保持できます。
DBの準備
- ステップ1 *-新しいデータベースを作成します。 データベースは、次の2つの方法で準備できます。
- ターミナルで_mysql -u root –p_を実行します
. * _CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci; _を介して新しいデータベースを作成します
ステップ2 *- *config/db.php ファイルでデータベース接続を設定します。 次の構成は、現在使用されているシステム用です。
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
ステップ3 *-ルートフォルダー内で./yii migrate/create test_table *を実行します。 このコマンドは、DBを管理するためのデータベース移行を作成します。 移行ファイルは、プロジェクトルートの *migrations フォルダーに表示されます。
ステップ4 *-この方法で移行ファイル(この場合は *m160106_163154_test_table.php )を変更します。
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160106_163154_test_table extends Migration {
public function safeUp()\ {
$this->createTable("user", [
"id" => Schema::TYPE_PK,
"name" => Schema::TYPE_STRING,
"email" => Schema::TYPE_STRING,
]);
$this->batchInsert("user", ["name", "email"], [
["User1", "[email protected]"],
["User2", "[email protected]"],
["User3", "[email protected]"],
["User4", "[email protected]"],
["User5", "[email protected]"],
["User6", "[email protected]"],
["User7", "[email protected]"],
["User8", "[email protected]"],
["User9", "[email protected]"],
["User10", "[email protected]"],
["User11", "[email protected]"],
]);
}
public function safeDown() {
$this->dropTable('user');
}
}
?>
上記の移行では、id、name、およびemailのフィールドを持つ user テーブルが作成されます。 また、いくつかのデモユーザーを追加します。
- ステップ5 *-プロジェクトのルート内で./yii migrate *を実行して、データベースに移行を適用します。
ステップ6 *-次に、 *user テーブルのモデルを作成する必要があります。 簡単にするために、 Gii コード生成ツールを使用します。 この url:http://localhost:8080/index.php?r = gii を開きます。 次に、「Model generator」ヘッダーの下にある「Start」ボタンをクリックします。 テーブル名(「ユーザー」)とモデルクラス(「MyUser」)を入力し、「プレビュー」ボタンをクリックして、最後に「生成」ボタンをクリックします。
MyUserモデルがモデルディレクトリに表示されます。
データキャッシング
- データキャッシングは、PHP変数をキャッシュに保存し、後で取得するのに役立ちます。 データキャッシングは、通常はアプリケーションコンポーネントとして登録されるキャッシュコンポーネントに依存しています。 アプリケーションコンポーネントにアクセスするには、 *Yii
- $ app→cache* を呼び出します。 複数のキャッシュアプリケーションコンポーネントを登録できます。
Yiiは次のキャッシュストレージをサポートしています-
- yii \ caching \ DbCache-データベーステーブルを使用して、キャッシュされたデータを保存します。 Uouは、yii \ caching \ DbCache :: $ cacheTableで指定されたテーブルを作成する必要があります。
- yii \ caching \ ApcCache-PHP APC拡張を使用します。
- yii \ caching \ FileCache-ファイルを使用してキャッシュされたデータを保存します。
- yii \ caching \ DummyCache-実際のキャッシングを行わないキャッシュプレースホルダーとして機能します。 このコンポーネントの目的は、キャッシュの可用性を確認する必要があるコードを簡素化することです。
- yii \ caching \ MemCache-PHP memcache拡張を使用します。
- yii \ caching \ WinCache-PHP WinCache拡張機能を使用します。
- yii \ redis \ Cache-Redisデータベースに基づいてキャッシュコンポーネントを実装します。
- yii \ caching \ XCache-PHP XCache拡張を使用します。
すべてのキャッシュコンポーネントは、次のAPIをサポートしています-
- get()-指定されたキーでキャッシュからデータ値を取得します。 データ値が期限切れ/無効化されているか、見つからない場合は、偽の値が返されます。
- add()-キーがキャッシュ内に見つからない場合、キーによって識別されるデータ値をキャッシュに保存します。
- set()-キーで識別されるデータ値をキャッシュに保存します。
- multiGet()-指定されたキーでキャッシュから複数のデータ値を取得します。
- multiAdd()-複数のデータ値をキャッシュに保存します。 各アイテムはキーで識別されます。 キーがキャッシュに既に存在する場合、データ値はスキップされます。
- multiSet()-複数のデータ値をキャッシュに保存します。 各アイテムはキーで識別されます。
- exists()-指定されたキーがキャッシュで見つかったかどうかを示す値を返します。
- flush()-すべてのデータ値をキャッシュから削除します。
- delete()-キーから識別されたデータ値をキャッシュから削除します。
キャッシュに保存されたデータ値は、削除されない限り永久に残ります。 この動作を変更するには、set()メソッドを呼び出してデータ値を保存するときに有効期限パラメーターを設定します。
キャッシュされたデータ値は、*キャッシュの依存関係*の変更により無効化されることもあります
- yii \ caching \ DbDependency-指定されたSQLステートメントのクエリ結果が変更されると、依存関係が変更されます。
- yii \ caching \ ChainedDependency-チェーンの依存関係のいずれかが変更されると、依存関係が変更されます。
- yii \ caching \ FileDependency-ファイルの最終変更時刻が変更されると、依存関係が変更されます。
- yii \ caching \ ExpressionDependency-指定されたPHP式の結果が変更されると、依存関係が変更されます。
ここで、 cache アプリケーションコンポーネントをアプリケーションに追加します。
ステップ1 *- *config/web.php ファイルを変更します。
<?php
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'components' => [
'request' => [
//!!! insert a secret key in the following (if it is empty) - this
//is required by cookie validation
'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
//send all mails to a file by default. You have to set
//'useFileTransport' to false and configure a transport
//for the mailer to send real emails.
'useFileTransport' => true,
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'db' => require(__DIR__ . '/db.php'),
],
'modules' => [
'hello' => [
'class' => 'app\modules\hello\Hello',
],
],
'params' => $params,
];
if (YII_ENV_DEV) {
//configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
return $config;
?>
ステップ2 *- actionTestCache()*という新しい関数をSiteControllerに追加します。
public function actionTestCache() {
$cache = Yii::$app->cache;
//try retrieving $data from cache
$data = $cache->get("my_cached_data");
if ($data === false) {
//$data is not found in cache, calculate it from scratch
$data = date("d.m.Y H:i:s");
//store $data in cache so that it can be retrieved next time
$cache->set("my_cached_data", $data, 30);
}
//$data is available here
var_dump($data);
}
ステップ3 *-Webブラウザーのアドレスバーに *http://localhost:8080/index.php?r = site/test-cache と入力すると、次のように表示されます。
- ステップ4 *-ページをリロードすると、日付が変更されていないことに気付くはずです。 日付値はキャッシュされ、キャッシュは30秒以内に期限切れになります。 30秒後にページをリロードします。
クエリキャッシング
クエリキャッシングは、データベースクエリの結果をキャッシュします。 クエリキャッシングには、DB接続とキャッシュアプリケーションコンポーネントが必要です。
ステップ1 *- actionQueryCaching()*という新しいメソッドをSiteControllerに追加します。
public function actionQueryCaching() {
$duration = 10;
$result = MyUser::getDb()->cache(function ($db) {
return MyUser::find()->count();
}, $duration);
var_dump($result);
$user = new MyUser();
$user->name = "cached user name";
$user->email = "[email protected]";
$user->save();
echo "==========";
var_dump(MyUser::find()->count());
}
上記のコードでは、データベースクエリをキャッシュし、新しいユーザーを追加して、ユーザーカウントを表示します。
ステップ2 *-URL *http://localhost:8080/index.php?r = site/query-caching にアクセスして、ページをリロードします。
最初のページを開くと、DBクエリをキャッシュし、すべてのユーザーカウントを表示します。 ページをリロードすると、データベースクエリがキャッシュされるため、キャッシュされたDBクエリの結果は同じです。
次のコマンドを使用して、コンソールからキャッシュをフラッシュできます-
- yii cache -利用可能なキャッシュコンポーネントを表示します。
- yii cache/flush cache1 cache2 cache3 -キャッシュコンポーネントcache1、cache2、cache3をフラッシュします。
- yii cache/flush-all -すべてのキャッシュコンポーネントをフラッシュします。
ステップ3 *-アプリケーションのプロジェクトルート内で。/yii cache/flush-all *を実行します。