教程:使用 Azure Cache for Redis 提高 Azure Database for MySQL 灵活服务器性能

本文演示了如何使用 Azure Cache for Redis 提高 Azure Database for MySQL 灵活服务器实例的性能。 Azure Cache for Redis 是一个安全的数据缓存和消息传送中转站,可让应用程序以较高的吞吐量、较低的延迟访问数据。

先决条件

对于本快速入门,你需要:

  • 具有活动订阅的 Azure 帐户。

如果没有 Azure 订阅,可在开始前创建一个 Azure 试用帐户

遇到问题? 请告诉我们

填充 MySQL 数据库

连接至将 MySQL Workbench 与 Azure Database for MySQL 灵活服务器配合使用,然后运行以下查询来填充数据库。

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 缓存

  1. 若要创建缓存,请登录到 Azure 门户并选择创建资源

    左侧导航窗格中突出显示了“创建资源”。

  2. 在“入门”页上的搜索框中键入“Azure Cache for Redis”。 然后选择创建

    Azure 市场的屏幕截图,其中的搜索框中包含“Azure Cache for Redis”,并用红色框突出显示了“创建”。

  3. 在“新建 Redis 缓存”页上配置缓存的设置。

    设置 选择值 说明
    订阅 单击下拉箭头并选择你的订阅。 要在其下创建此新的 Azure Cache for Redis 实例的订阅。
    资源组 单击下拉箭头并选择一个资源组,或者选择新建并输入新的资源组名称。 要在其中创建缓存和其他资源的资源组的名称。 将所有应用资源放入一个资源组可以轻松地统一管理或删除这些资源。
    DNS 名称 输入唯一名称。 缓存名称必须是包含 1 到 63 个字符的字符串,只能包含数字、字母或连字符。 该名称必须以数字或字母开头和结尾,且不能包含连续的连字符。 缓存实例的主机名<DNS name>.redis.cache.chinacloudapi.cn
    位置 单击下拉箭头并选择一个位置。 选择使用缓存的其他服务附近的区域
    缓存 SKU 打开下拉列表并选择一个 SKU 此 SKU 决定可用于缓存的大小、性能和功能参数。 有关详细信息,请参阅用于 Redis 的 Azure 缓存概述
    缓存大小 打开下拉列表并选择缓存的大小 有关详细信息,请参阅用于 Redis 的 Azure 缓存概述
  4. 选择网络选项卡,或选择网络按钮(位于页面底部) 。

  5. 网络选项卡中,选择你的连接方法。

  6. 选择“下一步: 高级”选项卡,或选择页面底部的“下一步: 高级”按钮,以查看“高级”选项卡。

    显示工作窗格中的“高级”选项卡和可供选择选项的屏幕截图。

    • 对于“基本”或“标准”缓存,请切换非 TLS 端口的选项。 还可以选择是否要启用“Microsoft Entra 身份验证”。
    • 对于“高级”缓存,请配置非 TLS 端口、群集、托管标识和数据持久性的设置。 还可以选择是否要启用“Microsoft Entra 身份验证”。
  7. 选择下一步: 标记选项卡,或选择页面底部的下一步: 标记按钮 。

  8. 或者,在标记选项卡中,如果希望对资源分类,请输入名称或值。

  9. 选择“查看 + 创建”。 随后你会转到“查看 + 创建”选项卡,Azure 将在此处验证配置。

  10. 显示绿色的“已通过验证”消息后,选择创建

创建缓存需要一段时间。 可以在 Azure Cache for Redis 的概述页上监视进度。 如果状态显示为正在运行,则表示该缓存可供使用。

将 Redis 用于 Python

在本地环境或者 Azure 虚拟机或 Azure 应用服务上安装最新版 Python。 使用 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.chinacloudapi.cn',
    port=6379,
    password='azure-redis-primary-access-key')

mysqlcnx = mysql.connector.connect(user='your-admin-username', password='<password>',
                              host='database-servername.mysql.database.chinacloudapi.cn',
                              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()

将 Redis 与 PHP 结合使用

在本地环境中安装 PHP。 按照以下步骤编写 PHP 脚本,用于缓存来自 Azure Database for MySQL 灵活服务器数据库的 SQL 查询。 以下是运行该脚本之前需满足的一些先决条件:

  1. 安装并启用 Redis PECL 扩展以将 Azure Cache for Redis 与 PHP 脚本配合使用。 请参阅如何在本地安装扩展
  2. 安装并启用 MySQL PDO 扩展
<?php

$redis = new Redis();
$redis->connect('azure-redis-instance-ame.redis.cache.chinacloudapi.cn', 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.chinacloudapi.cn';

    $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);

使用 Redis 和 WordPress

通过为 WordPress 应用程序启用 Azure Cache for Redis 实例,你可以更快地传送内容,因为所有 WordPress 内容都存储在数据库中。 可以缓存主要仅从 WordPress 数据库读取的内容,以加快查询查找速度。 可以使用其中任一插件来设置 Redis。 安装并启用 Redis PECL 扩展。 请参阅如何在本地安装扩展如何在 Azure 应用服务中安装扩展

安装 Redis 对象缓存并在 WordPress 应用程序上激活此插件。 现在,更新 wp-config.php 文件中以下语句上方的内容:/ That's all, stop editing! 快乐博客。 /*

define( 'WP_REDIS_HOST', 'azure-redis-servername.redis.cache.chinacloudapi.cn' );
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 设置页。 现在选择启用对象缓存。 该插件将从 wp-config.php 文件中读取 Azure Cache for Redis 实例信息。

还可以使用 W3 Total Cache 在 WordPress 应用上配置 Azure Cache for Redis。 可以使用查询监视器插件评估性能改进情况,该插件允许调试数据库查询,还能显示按插件分组的数据库查询总数。

下一步