Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Из этого краткого руководства вы узнаете, как использовать кэш Управляемого Redis Azure из приложения Node.js, написанного на языке TypeScript, и выполнить проверку подлинности подключения Redis с помощью идентификатора Microsoft Entra.
Предпосылки
Подписка Azure — создайте бесплатную учетную запись.
Установка Node.js LTS
Установка TypeScript
Добавьте пакеты, используемые в этом кратком руководстве, в проект:
npm install redis @redis/entraid @redis/clientПроверка подлинности в Azure для среды разработки с помощью Azure CLI:
az login
Пример кода краткого руководства в этой статье доступен на сайте GitHub.
Создайте управляемый экземпляр Redis в Azure
Сначала создайте кэш Управляемого Redis в Azure на портале Azure.
При создании кэша проверка подлинности идентификатора Microsoft Entra включена по умолчанию, что делает его безопасным с самого начала. В этом кратком руководстве кэш использует общедоступную конечную точку. В рабочей среде рекомендуется использовать частные конечные точки и другие сетевые элементы управления.
- Чтобы создать кэш с помощью портала, выполните одну из следующих процедур:
-
При необходимости можно создать кэш с помощью Azure CLI, PowerShell или любого из нужных средств.
Код для подключения к кэшу Redis
В первой части файла index.tsкода TypeScript настройте подключение к кэшу:
import { DefaultAzureCredential } from '@azure/identity';
import { EntraIdCredentialsProviderFactory, REDIS_SCOPE_DEFAULT } from '@redis/entraid';
import { createCluster, RedisClusterType, RedisModules, RedisFunctions, RedisScripts } from '@redis/client';
import * as net from 'node:net';
const redisEndpoint = process.env.REDIS_ENDPOINT!;
if (!redisEndpoint) {
console.error('REDIS_ENDPOINT is not set. It should look like: `cache-name.region-name.redis.azure.net:<PORT>`. Find the endpoint in the Azure portal.');
process.exit(1);
}
const [redisHostName, _] = redisEndpoint.split(":");
let client;
function createRedisClient(): RedisClusterType<RedisModules, RedisFunctions, RedisScripts> {
const credential = new DefaultAzureCredential();
const provider = EntraIdCredentialsProviderFactory.createForDefaultAzureCredential({
credential,
scopes: REDIS_SCOPE_DEFAULT,
options: {},
tokenManagerConfig: {
expirationRefreshRatio: 0.8
}
});
const client = createCluster<RedisModules, RedisFunctions, RedisScripts>({
rootNodes: [{ url: `rediss://${redisEndpoint}` }],
defaults: {
credentialsProvider: provider,
socket: {
connectTimeout: 15000,
tls: true,
// This quickstart code uses a fail fast `reconnectStrategy` which
// is suitable only in sample code. The purpose is to quickly
// demonstrate the functionality without getting stuck in
// reconnection loops if your endpoint or authentication is not
// correctly configured. In production code, a more robust
// `reconnectStrategy` should be implemented.
reconnectStrategy: () => new Error('Failure to connect')
}
},
nodeAddressMap(incomingAddress) {
const [hostNameOrIP, port] = incomingAddress.split(":");
const address =
net.isIP(hostNameOrIP) !== 0
? redisHostName
: hostNameOrIP;
return {
host: address,
port: Number(port),
};
}
});
client.on('error', (err) => console.error('Redis cluster error:', err));
return client;
}
Используйте функцию createRedisClient() для создания подключения клиента redis узла к кэшу Redis.
client = createRedisClient();
await client.connect();
Код для проверки подключения
В следующем разделе проверьте подключение с помощью команды Redis PING . Возвращается сервер PONGRedis.
const pingResult = await client.ping();
console.log('Ping result:', pingResult);
Набор кода ключа, получение ключа
В этом разделе используются SET и GET команды для начала записи и чтения данных в кэше Redis проще всего.
const setResult = await client.set("Message", "Hello! The cache is working from Node.js!");
console.log('Set result:', setResult);
const getResult = await client.get("Message");
console.log('Get result:', getResult);
Запустите код
Создайте и запустите приложение Node.js.
tsc
node index.js
Результат выглядит следующим образом:
Ping result: PONG
Set result: OK
Get result: Hello! The cache is working from Node.js!
Здесь вы можете увидеть этот пример кода в полном объеме.
import { DefaultAzureCredential } from '@azure/identity';
import { EntraIdCredentialsProviderFactory, REDIS_SCOPE_DEFAULT } from '@redis/entraid';
import { createCluster, RedisClusterType, RedisModules, RedisFunctions, RedisScripts } from '@redis/client';
import * as net from 'node:net';
const redisEndpoint = process.env.REDIS_ENDPOINT!;
if (!redisEndpoint) {
console.error('REDIS_ENDPOINT is not set. It should look like: `cache-name.region-name.redis.azure.net:<PORT>`. Find the endpoint in the Azure portal.');
process.exit(1);
}
const [redisHostName, _] = redisEndpoint.split(":");
let client;
function createRedisClient(): RedisClusterType<RedisModules, RedisFunctions, RedisScripts> {
const credential = new DefaultAzureCredential();
const provider = EntraIdCredentialsProviderFactory.createForDefaultAzureCredential({
credential,
scopes: REDIS_SCOPE_DEFAULT,
options: {},
tokenManagerConfig: {
expirationRefreshRatio: 0.8
}
});
const client = createCluster<RedisModules, RedisFunctions, RedisScripts>({
rootNodes: [{ url: `rediss://${redisEndpoint}` }],
defaults: {
credentialsProvider: provider,
socket: {
connectTimeout: 15000,
tls: true,
// This quickstart code uses a fail fast `reconnectStrategy` which
// is suitable only in sample code. The purpose is to quickly
// demonstrate the functionality without getting stuck in
// reconnection loops if your endpoint or authentication is not
// correctly configured. In production code, a more robust
// `reconnectStrategy` should be implemented.
reconnectStrategy: () => new Error('Failure to connect')
}
},
nodeAddressMap(incomingAddress) {
const [hostNameOrIP, port] = incomingAddress.split(":");
const address =
net.isIP(hostNameOrIP) !== 0
? redisHostName
: hostNameOrIP;
return {
host: address,
port: Number(port),
};
}
});
client.on('error', (err) => console.error('Redis cluster error:', err));
return client;
}
try {
client = createRedisClient();
await client.connect();
const pingResult = await client.ping();
console.log('Ping result:', pingResult);
const setResult = await client.set("Message", "Hello! The cache is working from Node.js!");
console.log('Set result:', setResult);
const getResult = await client.get("Message");
console.log('Get result:', getResult);
} catch (err) {
console.error('Error:', err);
} finally {
if (client) {
try {
await client.quit();
} catch (quitErr) {
console.error('Error occurred while quitting Redis client:', quitErr);
}
}
}
Очистите ресурсы
Если вы хотите продолжить использовать ресурсы, созданные в этой статье, сохраните группу ресурсов.
В противном случае, если вы закончите работу с ресурсами, можно удалить созданную группу ресурсов Azure, чтобы избежать расходов.
Это важно
Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали ресурсы внутри существующей группы ресурсов, содержащей ресурсы, которые необходимо сохранить, можно удалить каждый ресурс по отдельности, а не удалить группу ресурсов.
Удаление группы ресурсов
Войдите на портал Azure и выберите группы ресурсов.
Выберите группу ресурсов, которую вы хотите удалить.
Если существует множество групп ресурсов, используйте фильтр для любого поля... введите имя группы ресурсов, созданной для этой статьи. Выберите группу ресурсов в списке результатов.
Выберите команду Удалить группу ресурсов.
Вам предлагается подтвердить удаление группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и щелкните Удалить.
Через некоторое время группа ресурсов и все ее ресурсы будут удалены.