Yii-キャッシング
キャッシングは、アプリケーションのパフォーマンスを向上させる効果的な方法です。キャッシュメカニズムは静的データをキャッシュに保存し、要求されたときにキャッシュから取得します。サーバー側では、キャッシュを使用して、最新ニュースのリストなどの基本データを保存できます。ページフラグメントまたはWebページ全体を保存することもできます。クライアント側では、HTTPキャッシュを使用して、最近アクセスしたページをブラウザのキャッシュに保持できます。
DBの準備
Step 1−新しいデータベースを作成します。データベースは以下の2つの方法で作成できます。
ターミナルでmysql-u root –pを実行します
。CREATE DATABASE helloworld CHARACTER SET utf8 COLLATEutf8_general_ciを使用して新しいデータベースを作成します。
Step 2 −でデータベース接続を構成します config/db.phpファイル。次の構成は、現在使用されているシステム用です。
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
Step 3 −ルートフォルダ内 run ./yii migrate/create test_table。このコマンドは、DBを管理するためのデータベース移行を作成します。移行ファイルはに表示されますmigrations プロジェクトルートのフォルダ。
Step 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');
}
}
?>
上記の移行により、 user次のフィールドを持つテーブル:id、name、およびemail。また、いくつかのデモユーザーを追加します。
Step 5 −プロジェクトルート内 run ./yii migrate 移行をデータベースに適用します。
Step 6 −次に、モデルを作成する必要があります。 userテーブル。簡単にするために、Giiコード生成ツール。これを開くurl: http://localhost:8080/index.php?r=gii。次に、「モデルジェネレータ」ヘッダーの下にある「開始」ボタンをクリックします。テーブル名(「ユーザー」)とモデルクラス(「MyUser」)を入力し、「プレビュー」ボタンをクリックして、最後に「生成」ボタンをクリックします。
MyUserモデルがmodelsディレクトリに表示されます。
データキャッシング
データキャッシュは、PHP変数をキャッシュに保存し、後で取得するのに役立ちます。データキャッシングは、通常アプリケーションコンポーネントとして登録されているキャッシュコンポーネントに依存しています。アプリケーションコンポーネントにアクセスするには、Yii::$app → cache。複数のキャッシュアプリケーションコンポーネントを登録できます。
Yiiは次のキャッシュストレージをサポートしています-
yii \ caching \ DbCache-データベーステーブルを使用してキャッシュされたデータを保存します。Uouは、yii \ caching \ DbCache :: $ cacheTableで指定されているようにテーブルを作成する必要があります。
yii \ caching \ ApcCache - PHPAPC拡張機能を使用します。
yii \ cacheing \ FileCache-ファイルを使用してキャッシュされたデータを保存します。
yii \ caching \ DummyCache-実際のキャッシュを行わないキャッシュプレースホルダーとして機能します。このコンポーネントの目的は、キャッシュの可用性をチェックする必要があるコードを単純化することです。
yii \ cacheing \ MemCache -PHPのmemcache拡張機能を使用します。
yii \ cacheing \ WinCache -PHPWinCache拡張機能を使用します。
yii \ redis \ Cache -Redisデータベースに基づいてキャッシュコンポーネントを実装します。
yii \ cacheing \ XCache -PHPXCache拡張機能を使用します。
すべてのキャッシュコンポーネントは、次のAPIをサポートしています-
get() -指定されたキーを使用してキャッシュからデータ値を取得します。データ値が期限切れ/無効であるか、見つからない場合は、false値が返されます。
add() -キーがキャッシュに見つからない場合、キーによって識別されるデータ値をキャッシュに格納します。
set() -キーで識別されるデータ値をキャッシュに格納します。
multiGet() -指定されたキーを使用してキャッシュから複数のデータ値を取得します。
multiAdd() -複数のデータ値をキャッシュに格納します。各アイテムはキーで識別されます。キーがすでにキャッシュに存在する場合、データ値はスキップされます。
multiSet() -複数のデータ値をキャッシュに格納します。各アイテムはキーで識別されます。
exists() -指定されたキーがキャッシュ内にあるかどうかを示す値を返します。
flush() -キャッシュからすべてのデータ値を削除します。
delete() -キーで識別されるデータ値をキャッシュから削除します。
キャッシュに保存されたデータ値は、削除されない限り、永久にそこに残ります。この動作を変更するには、set()メソッドを呼び出してデータ値を格納するときに有効期限パラメーターを設定できます。
キャッシュされたデータ値は、の変更によって無効にすることもできます。 cache dependencies −
yii \ caching \ DbDependency-指定されたSQLステートメントのクエリ結果が変更されると、依存関係が変更されます。
yii \ caching \ ChainedDependency-チェーンの依存関係のいずれかが変更されると、依存関係が変更されます。
yii \ cacheing \ FileDependency-ファイルの最終変更時刻が変更されると、依存関係が変更されます。
yii \ caching \ ExpressionDependency-指定されたPHP式の結果が変更されると、依存関係が変更されます。
ここで、 cache アプリケーションへのアプリケーションコンポーネント。
Step 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;
?>
Step 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);
}
Step 3 −タイプ http://localhost:8080/index.php?r=site/test-cache Webブラウザのアドレスバーに次のように表示されます。
Step 4−ページをリロードすると、日付が変更されていないことに気付くはずです。日付値がキャッシュされ、キャッシュは30秒以内に期限切れになります。30秒後にページをリロードします。
クエリキャッシュ
クエリキャッシュは、データベースクエリの結果をキャッシュします。クエリキャッシュには、DB接続とキャッシュアプリケーションコンポーネントが必要です。
Step 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());
}
上記のコードでは、データベースクエリをキャッシュし、新しいユーザーを追加して、ユーザー数を表示します。
Step 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 −すべてのキャッシュコンポーネントをフラッシュします。
Step 3 −アプリケーション実行のプロジェクトルート内 ./yii cache/flush-all。