你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:在 Node.js 中使用 Azure Redis
在本快速入门中,你将 Azure 托管 Redis(预览版)或 Azure Cache for Redis 集成到 Node.js 应用中。 该应用可访问安全专用缓存,该缓存可从 Azure 内的任何应用程序进行访问。
先决条件
- Azure 订阅 - 创建免费帐户
- Node.js 安装 - 若要安装 Node.js,请参阅在 Windows 上安装 Node.js,了解如何在 Windows 计算机上安装 Node 和 npm。
创建 Azure 托管 Redis(预览版)实例
要创建 Azure 托管 Redis(预览版)实例,请登录到 Azure 门户并选择“创建资源”。
在“新建”页上选择“数据库”,然后选择“Azure Cache for Redis”。
在“新建 Redis 缓存”页上配置新缓存的设置。
设置 选择值 说明 订阅 单击下拉箭头并选择你的订阅。 要在其下创建这个新的 Azure 托管 Redis 实例的订阅。 资源组 单击下拉箭头并选择一个资源组,或者选择新建并输入新的资源组名称。 要在其中创建缓存和其他资源的资源组的名称。 将所有应用资源放入一个资源组可以轻松地统一管理或删除这些资源。 DNS 名称 输入在区域中唯一的名称。 如果与缓存的区域名称组合,缓存名称必须为介于 1 到 63 个字符的字符串,且只能包含数字、字母或连字符。 (如果缓存名称长度少于 45 个字符,则它应该可以在所有当前可用的区域中正常工作。)该名称必须以数字或字母开头和结尾,且不能包含连续的连字符。 缓存实例的主机名为 \<DNS name\>.\<Azure region\>.redis.azure.net
。位置 单击下拉箭头并选择一个位置。 Azure 托管 Redis 在选定的 Azure 区域中可用。 缓存类型 下拉列表并选择性能层和缓存大小。 层级确定了 Redis 实例的性能,而缓存大小确定可用于存储数据的内存。 有关选择适当的性能层的指导,请参阅选择适当层级 选择“下一步: 网络”,并选择公共或专用终结点。
选择“下一页: 高级”。 在这里,可以配置要添加到实例的任何 Redis 模块。
将集群策略设置为企业(用于非集群缓存),或设置为 OSS(用于集群缓存)。 有关选择“群集策略”的详细信息,请参阅群集策略。
如果使用活动异地复制,则必须在创建过程中对其进行配置。 有关如何执行此操作的说明,请参阅为 Azure 托管 Redis 实例配置活动异地复制。
重要
创建 Azure 托管 Redis(预览版)实例后,无法更改群集策略。 如果使用 RediSearch,则需要企业群集策略,
NoEviction
是唯一支持的逐出策略。重要
如果在异地复制组中使用此缓存实例,则创建实例后无法更改逐出策略。 在创建缓存之前,请务必了解主节点的逐出策略。 有关活动异地复制的详细信息,请参阅活动异地复制先决条件。
重要
创建缓存实例后,无法更改模块。 必须在创建 Azure Cache for Redis 实例时启用模块。 没有在创建缓存后启用模块配置的选项。
在完成时选择“下一步:标记”并跳过。
在完成时选择“下一步:查看 + 创建”。
检查设置,然后选择“创建”。
创建 Redis 实例需要几分钟时间。 可以在 Azure 托管 Redis 的“概述”页面上监视进度。 如果“状态”显示为“正在运行”,则表示该缓存可供使用。
创建用于 Redis 的 Azure 缓存实例
若要创建缓存,请登录到 Azure 门户。 在门户菜单上,选择“创建资源”。
在“入门”页上的搜索框中键入“Azure Cache for Redis”。 在搜索结果中找到“Azure Cache for Redis”,然后选择“创建”。
在“新建 Redis 缓存”窗格的“基本信息”选项卡上,配置缓存的以下设置:
设置 操作 说明 订阅 选择 Azure 订阅。 用于创建 Azure Cache for Redis 的新实例的订阅。 资源组 选择一个资源组,或者选择“新建”并输入新的资源组名称。 要在其中创建缓存和其他资源的资源组的名称。 将所有应用资源放入一个资源组可以轻松地统一管理或删除这些资源。 DNS 名称 输入唯一名称。 缓存名称必须是包含 1 到 63 个字符的字符串,只能包含数字、字母和连字符。 该名称必须以数字或字母开头和结尾,且不能包含连续的连字符。 缓存实例的主机名为 \<DNS name>.redis.cache.windows.net
。位置 选择一个位置。 一个靠近其他使用缓存的服务的 Azure 区域。 缓存 SKU 选择 SKU。 此 SKU 决定可用于缓存的大小、性能和功能参数。 有关详细信息,请参阅 Azure Cache for Redis 概述。 缓存大小 选择缓存大小。 有关详细信息,请参阅 Azure Cache for Redis 概述。 选择“网络”选项卡,或选择“下一步:网络”。
在“网络”选项卡上,选择用于缓存的连接方法。
选择“高级”选项卡,或选择“下一步:高级”。
在“高级”窗格中,根据以下信息验证或选择身份验证方法:
- 默认情况下,对于新的“基本”、“标准”或“高级”缓存,“Microsoft Entra 身份验证”将处于启用状态,而“访问密钥身份验证”则处于禁用状态。
- 对于“基本”或“标准”缓存,可以选择非 TLS 端口的选项。
- 对于“标准”和“高级”缓存,可以选择启用可用性区域。 创建缓存后,无法禁用可用性区域。
- 对于“高级”缓存,请配置非 TLS 端口、群集、托管标识和数据持久性的设置。
重要
为了获得最佳安全性,我们建议你在可能的情况下使用 Microsoft Entra ID 和托管标识来授权针对缓存的请求。 与共享访问密钥授权相比,使用 Microsoft Entra ID 和托管标识进行授权提供了更高的安全性和易用性。 若要详细了解如何将托管标识与缓存配合使用,请参阅使用 Microsoft Entra ID 进行缓存身份验证。
(可选)选择“标记”选项卡或选择“下一步: 标记”。
(可选)如果希望对缓存资源进行分类,请在“标记”选项卡中输入标记名称和值。
选择“查看 + 创建”按钮。
在“查看 + 创建”选项卡上,Azure 会自动验证你的配置。
显示绿色的“已通过验证”消息后,选择“创建” 。
新的缓存部署需要几分钟的时间。 可以在 Azure Cache for Redis 的“概述”窗格上监视部署进度。 如果“状态”显示为“正在运行”,则表示该缓存可供使用。
安装 node-redis 客户端库
node-redis 库是 Redis 的主要 Node.js 客户端。 你可以使用以下命令安装客户端及 npm:
npm install redis
创建 Node.js 应用以访问缓存
创建 Node.js 应用,该应用使用 Microsoft Entra ID 或访问密钥连接到 Azure 托管 Redis(预览版)实例。 建议使用 Microsoft Entra ID。
在缓存上启用 Microsoft Entra ID 身份验证
如果已有缓存,则需要检查是否已启用 Microsoft Entra 身份验证。 如果未启用,请启用它。 建议为应用使用 Microsoft Entra ID。
在 Azure 门户中,选择你想要使用基于 Microsoft Entra 令牌的身份验证的 Azure Cache for Redis 实例。
从“资源”菜单中选择“身份验证”。
检查工作窗格,查看是否已选中“启用 Microsoft Entra 身份验证”。 如果已启用,可继续操作。
选择“启用 Microsoft Entra 身份验证”,然后输入有效用户的姓名。 选择“保存”时,系统会自动向你输入的用户默认分配数据所有者访问策略。 还可输入托管标识或服务主体以连接到缓存实例。
这会显示一个弹出对话框,询问是否要更新配置,并通知你这需要几分钟时间。 选择是。
重要
启用操作完成后,缓存实例中的节点将重新启动以加载新配置。 建议在维护时段或高峰营业时间外执行此操作。 此操作最多可能需要 30 分钟。
若要将 Microsoft Entra ID 与 Azure CLI 配合使用,请查看标识参考页面。
安装 JavaScript Azure 标识客户端库
Microsoft 身份验证库 (MSAL) 允许从 Microsoft 标识获取安全令牌,以对用户进行身份验证。 我们提供了一个 JavaScript Azure 标识客户端库,以通过 MSAL 支持令牌身份验证。 使用 npm
安装此库:
npm install @azure/identity
创建使用 Microsoft Entra ID 的新 Node.js 应用
添加对应主机名和服务主体 ID(这是 Microsoft Entra ID 服务主体或用户的对象 ID)的环境变量。 在 Azure 门户中,查找用户名。
set AZURE_MANAGED_REDIS_HOST_NAME=contosoCache set REDIS_SERVICE_PRINCIPAL_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
创建名为 redistest.js 的新脚本文件。
将下面的示例 JavaScript 添加到文件。 此代码演示如何使用缓存主机名和密钥环境变量连接到 Azure 托管 Redis 实例。 此代码还在缓存中存储和检索字符串值。 还执行了
PING
和CLIENT LIST
命令。 有关将 Redis 与 node-redis 客户端一起使用的更多示例,请参阅 https://redis.js.org/。const { createClient } = require("redis"); const { DefaultAzureCredential } = require("@azure/identity"); async function main() { // Construct a Token Credential from Identity library, e.g. ClientSecretCredential / ClientCertificateCredential / ManagedIdentityCredential, etc. const credential = new DefaultAzureCredential(); const redisScope = "https://redis.azure.com/.default"; // Fetch a Microsoft Entra token to be used for authentication. This token will be used as the password. let accessToken = await credential.getToken(redisScope); console.log("access Token", accessToken); // Create redis client and connect to the Azure Cache for Redis over the TLS port using the access token as password. const cacheConnection = createClient({ username: process.env.REDIS_SERVICE_PRINCIPAL_ID, password: accessToken.token, url: `redis://${process.env.AZURE_MANAGED_REDIS_HOST_NAME}:10000`, pingInterval: 100000, socket: { tls: true, keepAlive: 0 }, }); cacheConnection.on("error", (err) => console.log("Redis Client Error", err)); await cacheConnection.connect(); // PING command console.log("\nCache command: PING"); console.log("Cache response : " + await cacheConnection.ping()); // SET console.log("\nCache command: SET Message"); console.log("Cache response : " + await cacheConnection.set("Message", "Hello! The cache is working from Node.js!")); // GET console.log("\nCache command: GET Message"); console.log("Cache response : " + await cacheConnection.get("Message")); // Client list, useful to see if connection list is growing... console.log("\nCache command: CLIENT LIST"); console.log("Cache response : " + await cacheConnection.sendCommand(["CLIENT", "LIST"])); cacheConnection.disconnect(); return "Done" } main().then((result) => console.log(result)).catch(ex => console.log(ex));
使用 Node.js 运行该脚本。
node redistest.js
代码的输出如下所示。
Cache command: PING Cache response : PONG Cache command: GET Message Cache response : Hello! The cache is working from Node.js! Cache command: SET Message Cache response : OK Cache command: GET Message Cache response : Hello! The cache is working from Node.js! Cache command: CLIENT LIST Cache response : id=10017364 addr=76.22.73.183:59380 fd=221 name= age=1 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 ow=0 owmem=0 events=r cmd=client user=default numops=6 Done
创建使用重新身份验证的示例 JavaScript 应用
Microsoft Entra ID 访问令牌的有效期有限,平均为 75 分钟。 为了保持与缓存的连接,需要刷新令牌。 此示例演示如何使用 JavaScript 执行此操作。
创建名为 redistestreauth.js 的新脚本文件。
将下面的示例 JavaScript 添加到文件。
const { createClient } = require("redis"); const { DefaultAzureCredential } = require("@azure/identity"); async function returnPassword(credential) { const redisScope = "https://redis.azure.com/.default"; // Fetch a Microsoft Entra token to be used for authentication. This token will be used as the password. return credential.getToken(redisScope); } async function main() { // Construct a Token Credential from Identity library, e.g. ClientSecretCredential / ClientCertificateCredential / ManagedIdentityCredential, etc. const credential = new DefaultAzureCredential(); let accessToken = await returnPassword(credential); // Create redis client and connect to the Azure Cache for Redis over the TLS port using the access token as password. let cacheConnection = createClient({ username: process.env.REDIS_SERVICE_PRINCIPAL_ID, password: accessToken.token, url: `redis://${process.env.AZURE_MANAGED_REDIS_HOST_NAME}:10000`, pingInterval: 100000, socket: { tls: true, keepAlive: 0 }, }); cacheConnection.on("error", (err) => console.log("Redis Client Error", err)); await cacheConnection.connect(); for (let i = 0; i < 3; i++) { try { // PING command console.log("\nCache command: PING"); console.log("Cache response : " + await cacheConnection.ping()); // SET console.log("\nCache command: SET Message"); console.log("Cache response : " + await cacheConnection.set("Message", "Hello! The cache is working from Node.js!")); // GET console.log("\nCache command: GET Message"); console.log("Cache response : " + await cacheConnection.get("Message")); // Client list, useful to see if connection list is growing... console.log("\nCache command: CLIENT LIST"); console.log("Cache response : " + await cacheConnection.sendCommand(["CLIENT", "LIST"])); break; } catch (e) { console.log("error during redis get", e.toString()); if ((accessToken.expiresOnTimestamp <= Date.now())|| (redis.status === "end" || "close") ) { await redis.disconnect(); accessToken = await returnPassword(credential); cacheConnection = createClient({ username: process.env.REDIS_SERVICE_PRINCIPAL_ID, password: accessToken.token, url: `redis://${process.env.AZURE_MANAGED_REDIS_HOST_NAME}:10000`, pingInterval: 100000, socket: { tls: true, keepAlive: 0 }, }); } } } } main().then((result) => console.log(result)).catch(ex => console.log(ex));
使用 Node.js 运行该脚本。
node redistestreauth.js
代码的输出如下所示。
Cache command: PING Cache response : PONG Cache command: GET Message Cache response : Hello! The cache is working from Node.js! Cache command: SET Message Cache response : OK Cache command: GET Message Cache response : Hello! The cache is working from Node.js! Cache command: CLIENT LIST Cache response : id=10017364 addr=76.22.73.183:59380 fd=221 name= age=1 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 ow=0 owmem=0 events=r cmd=client user=default numops=6
注意
有关使用 Microsoft Entra ID 通过 node-redis 库向 Redis 进行身份验证的其他示例,请参阅此 GitHub 存储库
创建 Node.js 应用以访问缓存
创建 Node.js 应用,该应用使用 Microsoft Entra ID 或访问密钥连接到 Azure Redis 缓存。 建议使用 Microsoft Entra ID。
在缓存上启用 Microsoft Entra ID 身份验证
如果已有缓存,则需要检查是否已启用 Microsoft Entra 身份验证。 如果未启用,请启用它。 建议为应用使用 Microsoft Entra ID。
在 Azure 门户中,选择你想要使用基于 Microsoft Entra 令牌的身份验证的 Azure Cache for Redis 实例。
从“资源”菜单中选择“身份验证”。
检查工作窗格,查看是否已选中“启用 Microsoft Entra 身份验证”。 如果已启用,可继续操作。
选择“启用 Microsoft Entra 身份验证”,然后输入有效用户的姓名。 选择“保存”时,系统会自动向你输入的用户默认分配数据所有者访问策略。 还可输入托管标识或服务主体以连接到缓存实例。
这会显示一个弹出对话框,询问是否要更新配置,并通知你这需要几分钟时间。 选择是。
重要
启用操作完成后,缓存实例中的节点将重新启动以加载新配置。 建议在维护时段或高峰营业时间外执行此操作。 此操作最多可能需要 30 分钟。
若要将 Microsoft Entra ID 与 Azure CLI 配合使用,请查看标识参考页面。
安装 JavaScript Azure 标识客户端库
Microsoft 身份验证库 (MSAL) 允许从 Microsoft 标识获取安全令牌,以对用户进行身份验证。 我们提供了一个 JavaScript Azure 标识客户端库,以通过 MSAL 支持令牌身份验证。 使用 npm
安装此库:
npm install @azure/identity
创建使用 Microsoft Entra ID 的新 Node.js 应用
添加对应主机名和服务主体 ID(这是 Microsoft Entra ID 服务主体或用户的对象 ID)的环境变量。 在 Azure 门户中,查找用户名。
set AZURE_CACHE_FOR_REDIS_HOST_NAME=contosoCache set REDIS_SERVICE_PRINCIPAL_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
创建名为 redistest.js 的新脚本文件。
将下面的示例 JavaScript 添加到文件。 此代码演示如何使用缓存主机名和密钥环境变量连接到 Azure Redis 缓存实例。 此代码还在缓存中存储和检索字符串值。 还执行了
PING
和CLIENT LIST
命令。 有关将 Redis 与 node-redis 客户端一起使用的更多示例,请参阅 https://redis.js.org/。const { createClient } = require("redis"); const { DefaultAzureCredential } = require("@azure/identity"); async function main() { // Construct a Token Credential from Identity library, e.g. ClientSecretCredential / ClientCertificateCredential / ManagedIdentityCredential, etc. const credential = new DefaultAzureCredential(); const redisScope = "https://redis.azure.com/.default"; // Fetch a Microsoft Entra token to be used for authentication. This token will be used as the password. let accessToken = await credential.getToken(redisScope); console.log("access Token", accessToken); // Create redis client and connect to the Azure Cache for Redis over the TLS port using the access token as password. const cacheConnection = createClient({ username: process.env.REDIS_SERVICE_PRINCIPAL_ID, password: accessToken.token, url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`, pingInterval: 100000, socket: { tls: true, keepAlive: 0 }, }); cacheConnection.on("error", (err) => console.log("Redis Client Error", err)); await cacheConnection.connect(); // PING command console.log("\nCache command: PING"); console.log("Cache response : " + await cacheConnection.ping()); // SET console.log("\nCache command: SET Message"); console.log("Cache response : " + await cacheConnection.set("Message", "Hello! The cache is working from Node.js!")); // GET console.log("\nCache command: GET Message"); console.log("Cache response : " + await cacheConnection.get("Message")); // Client list, useful to see if connection list is growing... console.log("\nCache command: CLIENT LIST"); console.log("Cache response : " + await cacheConnection.sendCommand(["CLIENT", "LIST"])); cacheConnection.disconnect(); return "Done" } main().then((result) => console.log(result)).catch(ex => console.log(ex));
使用 Node.js 运行该脚本。
node redistest.js
代码的输出如下所示。
Cache command: PING Cache response : PONG Cache command: GET Message Cache response : Hello! The cache is working from Node.js! Cache command: SET Message Cache response : OK Cache command: GET Message Cache response : Hello! The cache is working from Node.js! Cache command: CLIENT LIST Cache response : id=10017364 addr=76.22.73.183:59380 fd=221 name= age=1 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 ow=0 owmem=0 events=r cmd=client user=default numops=6 Done
创建使用重新身份验证的示例 JavaScript 应用
Microsoft Entra ID 访问令牌的有效期有限,平均为 75 分钟。 为了保持与缓存的连接,需要刷新令牌。 此示例演示如何使用 JavaScript 执行此操作。
创建名为 redistestreauth.js 的新脚本文件。
将下面的示例 JavaScript 添加到文件。
const { createClient } = require("redis"); const { DefaultAzureCredential } = require("@azure/identity"); async function returnPassword(credential) { const redisScope = "https://redis.azure.com/.default"; // Fetch a Microsoft Entra token to be used for authentication. This token will be used as the password. return credential.getToken(redisScope); } async function main() { // Construct a Token Credential from Identity library, e.g. ClientSecretCredential / ClientCertificateCredential / ManagedIdentityCredential, etc. const credential = new DefaultAzureCredential(); let accessToken = await returnPassword(credential); // Create redis client and connect to the Azure Cache for Redis over the TLS port using the access token as password. let cacheConnection = createClient({ username: process.env.REDIS_SERVICE_PRINCIPAL_ID, password: accessToken.token, url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`, pingInterval: 100000, socket: { tls: true, keepAlive: 0 }, }); cacheConnection.on("error", (err) => console.log("Redis Client Error", err)); await cacheConnection.connect(); for (let i = 0; i < 3; i++) { try { // PING command console.log("\nCache command: PING"); console.log("Cache response : " + await cacheConnection.ping()); // SET console.log("\nCache command: SET Message"); console.log("Cache response : " + await cacheConnection.set("Message", "Hello! The cache is working from Node.js!")); // GET console.log("\nCache command: GET Message"); console.log("Cache response : " + await cacheConnection.get("Message")); // Client list, useful to see if connection list is growing... console.log("\nCache command: CLIENT LIST"); console.log("Cache response : " + await cacheConnection.sendCommand(["CLIENT", "LIST"])); break; } catch (e) { console.log("error during redis get", e.toString()); if ((accessToken.expiresOnTimestamp <= Date.now())|| (redis.status === "end" || "close") ) { await redis.disconnect(); accessToken = await returnPassword(credential); cacheConnection = createClient({ username: process.env.REDIS_SERVICE_PRINCIPAL_ID, password: accessToken.token, url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`, pingInterval: 100000, socket: { tls: true, keepAlive: 0 }, }); } } } } main().then((result) => console.log(result)).catch(ex => console.log(ex));
使用 Node.js 运行该脚本。
node redistestreauth.js
代码的输出如下所示。
Cache command: PING Cache response : PONG Cache command: GET Message Cache response : Hello! The cache is working from Node.js! Cache command: SET Message Cache response : OK Cache command: GET Message Cache response : Hello! The cache is working from Node.js! Cache command: CLIENT LIST Cache response : id=10017364 addr=76.22.73.183:59380 fd=221 name= age=1 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 ow=0 owmem=0 events=r cmd=client user=default numops=6
注意
有关使用 Microsoft Entra ID 通过 node-redis 库向 Redis 进行身份验证的其他示例,请参阅此 GitHub 存储库
清理资源
要继续使用在本文中创建的资源,请保留资源组。
否则,如果已完成资源,可以删除创建的 Azure 资源组以避免产生费用。
重要
删除资源组的操作不可逆。 删除资源组时,包含在其中的所有资源会被永久删除。 请确保不会意外删除错误的资源组或资源。 如果在现有资源组(其中包含要保留的资源)内创建了此资源,可以逐个删除这些资源,而不是删除资源组。
删除资源组的步骤
登录到 Azure 门户,然后选择“资源组”。
选择要删除的资源组。
如果有多个资源组,请使用“筛选任何字段...”框,键入为本文创建的资源组的名称。 在结果列表中选择资源组。
选择“删除资源组”。
系统会要求确认是否删除资源组。 键入资源组的名称进行确认,然后选择“删除”。
片刻之后,将会删除该资源组及其所有资源。
获取示例代码
获取 GitHub 上的 Node.js快速入门。
相关内容
本快速入门介绍了如何通过 Node.js 应用程序使用 Azure 托管 Redis(预览版)或 Azure Cache for Redis。 详细了解 Azure Redis 产品/服务: