この記事では、Azure Cache for Redis を使って Azure Database for MySQL フレキシブル サーバー インスタンスのパフォーマンスを向上させる方法を見ていきます。 Azure Cache for Redis は、高スループットで低遅延のデータ アクセスをアプリケーションに提供する、セキュリティで保護されたデータ キャッシュおよびメッセージング ブローカーです。
前提条件
このクイックスタートでは、以下が必要です。
- アクティブなサブスクリプションが含まれる Azure アカウント。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。 現在、Azure 無料アカウントがあれば、Azure Database for MySQL - フレキシブル サーバーを 12 か月間無料でお試しいただけます。 詳細については、「Azure 無料アカウントを使用して Azure Database for MySQL - フレキシブル サーバーを無料で試す」を参照してください。
- Azure Database for MySQL フレキシブル サーバー インスタンスがない場合は、「クイックスタート: クイック スタート: Azure portal を使用して Azure Database for MySQL のインスタンスを作成する」
または 「クイックスタート: Azure CLI を使用して Azure Database for MySQL - フレキシブル サーバーのインスタンスを作成する」を使用して作成します。 - 自分の IP アドレスからアクセスできるように、Azure Database for MySQL フレキシブル サーバー インスタンスのネットワーク設定を構成します。 Azure App Service または Azure Kubernetes サービスを使っている場合は、Azure portal で設定 [Azure 内の任意の Azure サービスにこのサーバーへのパブリック アクセスを許可する] を有効にします。
MySQL データベースにデータを設定する
「Azure Database for MySQL - フレキシブル サーバーで MySQL Workbench を使用する」にアクセスし、次のクエリを実行してデータベースを設定します。
CREATE DATABASE tododb;
CREATE TABLE tasks
(
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
title nvarchar(100) NOT NULL,
completed TINYINT(1) NOT NULL
);
INSERT INTO tasks (id,title, completed) VALUES
(1,'Task1', 0),
(2,'Task2', 0),
(3,'Task3', 1),
(4,'Task4', 1),
(5,'Task5', 0);
Redis Cache を作成する
Azure portal で、Azure Cache for Redis を検索して選択します。
Azure Cache for Redis ページで、作成>Azure Cache for Redis を選択します。
[新しい Redis Cache] ページの [基本] タブで、次の設定を構成します。
- [サブスクリプション] : 使用するサブスクリプションを選択します。
- リソース グループ: リソース グループを選択するか、[ 新規作成 ] を選択して新しいリソース グループ名を入力します。 すべてのアプリ リソースを同じリソース グループに配置すると、それらを簡単に管理または削除できます。
-
名前: リージョン内で一意のキャッシュ名を入力します。 名前は次の必要があります。
- 1 ~ 63 文字の文字列を指定します。
- 数字、文字、ハイフンのみを含みます。
- 先頭と末尾に数字または文字を使用します。
- 連続するハイフンを含まない。
- リージョン: キャッシュを使用する他のサービスの近くにある Azure リージョン を選択します。
- キャッシュ SKU: 使用可能なサイズ、パフォーマンス、およびキャッシュの機能を決定する SKU を選択します。
- キャッシュ サイズ: キャッシュ サイズを選択します。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。
[ネットワーク] タブ を 選択するか、[ 次へ: ネットワーク] を選択します。
[ネットワーク] タブで、キャッシュに使う接続方法を選びます。 セキュリティにはプライベート エンドポイント をお勧めします。 [プライベート エンドポイント] を選択した場合は、[プライベート エンドポイントの追加] を選択し、プライベート エンドポイントを作成します。
[ 詳細設定 ] タブを選択するか、[ 次へ: 詳細設定] を選択します。
[ 詳細設定 ] ウィンドウで、次のオプションを構成します。
- Microsoft Entra 認証またはアクセス キー認証を選択します。 Microsoft Entra 認証 は既定で有効になっています。
- TLS 以外のポートを 有効に するかどうかを選択します。
- Premium キャッシュの場合は、 可用性ゾーンを構成または無効にすることができます。 キャッシュの作成後に可用性ゾーンを無効にすることはできません。 Standard キャッシュの場合、可用性ゾーンは自動的に割り当てられます。 可用性ゾーンは Basic SKU では使用できません。
- Premium キャッシュの場合は、 レプリカ数、 クラスタリング と シャード数、 システム割り当てマネージド ID、 およびデータ永続化の設定を構成します。
次の図は、Standard SKU の [詳細設定 ] タブを示しています。
重要
可能であれば、マネージド ID と共に Microsoft Entra ID を使用して、キャッシュに対する要求を承認します。 Microsoft Entra ID とマネージド ID を使用した承認により、セキュリティが向上し、共有アクセス キーの承認よりも簡単に使用できます。 キャッシュでのマネージド ID の使用について詳しくは、キャッシュ認証への Microsoft Entra ID の使用に関する記事をご覧ください。
必要に応じて、[ タグ ] タブを選択するか、[ 次へ: タグ] を選択し、タグ名と値を入力してキャッシュ リソースを分類します。
[ 確認と作成] を選択し、検証に合格したら [ 作成] を選択します。
新しいキャッシュのデプロイには数分かかります。 デプロイの進行状況は、ポータルの Azure Cache for Redis ページで監視できます。 キャッシュの状態が [実行中] と表示されたら、キャッシュを使用する準備が整います。
Python での Redis の使用
最新バージョンの Python を、ローカル環境、Azure 仮想マシン、または Azure App Service にインストールします。 pip を使用して redis-py をインストールします。
pip install redis
次のコードでは、redis-py を使って Azure Cache for Redis インスタンスへの接続が作成され、クエリ結果が Azure Cache for Redis に格納されて、キャッシュから値がフェッチされます。
import redis
import mysql.connector
r = redis.Redis(
host='your-azure-redis-instance-name.redis.cache.windows.net',
port=6379,
password='azure-redis-primary-access-key')
mysqlcnx = mysql.connector.connect(user='your-admin-username', password='<password>',
host='database-servername.mysql.database.azure.com',
database='your-databsae-name')
mycursor = mysqlcnx.cursor()
mycursor.execute("SELECT * FROM tasks where completed=1")
myresult = mycursor.fetchall()
#Set the result of query in a key
if result:
cache.hmset(mykey, myresult)
cache.expire(mykey, 3600)
return result
#Get value of mykey
getkeyvalue= cache.hgetall(mykey)
#close mysql connection
mysqlcnx.close()
PHP で Redis を使用する
PHP をローカル環境にインストールします。 次の手順に沿って、Azure Database for MySQL フレキシブル サーバー データベースから SQL クエリをキャッシュする PHP スクリプトを作成します。 スクリプトを実行するには、次のようないくつかの前提条件があります。
- PHP スクリプトで Azure Cache for Redis を使うため、Redis PECL 拡張機能をインストールして有効にします。 拡張機能をローカル環境にインストールする方法に関するページをご覧ください
- MySQL PDO 拡張機能をインストールして有効にします
<?php
$redis = new Redis();
$redis->connect('azure-redis-instance-ame.redis.cache.windows.net', 6379);
$redis->auth('azure-redis-primary-access-key');
$key = 'tasks';
if (!$redis->get($key)) {
/*Pulling data from MySQL database*/
$database_name = 'database-name';
$database_user = 'your-database-user';
$database_password = 'your-database-password';
$mysql_host = 'database-servername.mysql.database.azure.com';
$pdo = new PDO('mysql:host=' . $mysql_host . '; dbname=' . $database_name, $database_user, $database_password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM tasks";
$stmt = $pdo->prepare($sql);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$tasks[] = $row;
}
$redis->set($key, serialize($tasks));
$redis->expire($key, 10);
} else {
/*Pulling data from Azure Cache for Redis*/
$tasks = unserialize($redis->get($key));
}
echo $source . ': <br>';
print_r($tasks);
WordPress で Redis を使用する
WordPress アプリケーションに対して Azure Cache for Redis インスタンスを有効にする利点は、すべての WordPress コンテンツがデータベースに格納されるため、コンテンツをより高速に配信できることです。 WordPress データベースからほとんど読み取り専用のコンテンツをキャッシュして、クエリの検索を高速化できます。 これらのプラグインのいずれかを使って Redis をセットアップできます。 Redis PECL 拡張機能をインストールして有効にします。 拡張機能をローカル環境にインストールする方法または拡張機能を Azure App Service にインストールする方法に関するページをご覧ください。
Redis Object Cache をインストールし、WordPress アプリケーションでこのプラグインをアクティブにします。 次に、wp-config.php
ファイルの次のステートメントのすぐ上を更新します。/ That's all, stop editing! 楽しいブログの時間をお過ごしください。 /*
define( 'WP_REDIS_HOST', 'azure-redis-servername.redis.cache.windows.net' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', 'azure-redis-primary-access-key' );
define( 'WP_REDIS_TIMEOUT', 1 );
define( 'WP_REDIS_READ_TIMEOUT', 1 );
// change the database for each site to avoid cache collisions
// values 0-15 are valid in a default redis config.
define( 'WP_REDIS_DATABASE', 0 );
// automatically delete cache keys after 7 days
define( 'WP_REDIS_MAXTTL', 60 * 60 * 24 * 7 );
// bypass the object cache, useful for debugging
// define( 'WP_REDIS_DISABLED', true );
/* That's all, stop editing! Happy blogging. */
Wordpress 管理ダッシュボードに移動し、メニューで Redis 設定ページを選びます。 次に、[Enable Object Cache] (Object Cache を有効にする) を選びます。 プラグインによって、wp-config.php
ファイルから Azure Cache for Redis インスタンス情報が読み取られます。
W3 Total Cache を使って、WordPress アプリで Azure Cache for Redis を構成することもできます。 Query Monitor プラグインを使ってパフォーマンスの向上を評価し、データベース クエリをデバッグすることができ、プラグインによってグループ化されたデータベース クエリの合計数も示されます。