Aracılığıyla paylaş


Hızlı Başlangıç: Node.js uygulamasında Azure Yönetilen Redis'e bağlanma

Bu hızlı başlangıçta, TypeScript dilinde yazılmış bir Node.js uygulamasından Azure Yönetilen Redis önbelleği kullanmayı ve Microsoft Entra Id kullanarak Redis bağlantısının kimliğini doğrulamayı öğreneceksiniz.

Önkoşullar

Bu makaledeki Hızlı Başlangıç örnek kodu GitHub'da kullanılabilir.

Azure Yönetilen Redis örneği oluştur

İlk olarak, Azure portalında bir Azure Yönetilen Redis önbelleği oluşturun.

Önbelleği oluşturduğunuzda, Microsoft Entra Id kimlik doğrulaması varsayılan olarak etkinleştirilir ve bu da başlangıçtan itibaren güvenli olmasını sağlar. Bu hızlı başlangıçta önbellek bir genel uç nokta kullanır. Üretimde özel uç noktaları ve diğer ağ denetimlerini kullanmayı göz önünde bulundurun.

  1. Portal ile önbellek oluşturmak için şu yordamlardan birini izleyin:
  • Azure Yönetilen Redis

    İsteğe bağlı olarak, Azure CLI, PowerShell veya tercih ettiğiniz aracı kullanarak önbellek oluşturabilirsiniz.

  1. Redis kaynağında kendinize veri erişimi izinleri verin.

Redis önbelleğine bağlanma kodu

TypeScript kod örnek dosyasının ilk bölümünde, index.tsönbelleğe bağlantınızı yapılandırın:

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;
}

redis önbelleğine createRedisClient() node-redis istemci bağlantısı oluşturmak için işlevini kullanın.

client = createRedisClient();
await client.connect();

Bağlantıyı test etmek için kod

Sonraki bölümde Redis PING komutunu kullanarak bağlantıyı test edin. Redis sunucusu döndürür PONG.

const pingResult = await client.ping();
console.log('Ping result:', pingResult);

Kod anahtarı ayarlama, anahtar alma

Bu bölümde redis önbelleğinde veri yazmaya ve okumaya en basit şekilde başlamak için ve SET komutlarını kullanınGET.

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

Kodu çalıştır

Node.js uygulamasını derleyin ve çalıştırın.

tsc
node index.js

Sonuç şöyle görünür:

Ping result: PONG
Set result: OK
Get result: Hello! The cache is working from Node.js!

Burada, bu kod örneğini tamamen görebilirsiniz.

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

        }
    }
}

Kaynakları temizle

Bu makalede oluşturduğunuz kaynakları kullanmaya devam etmek istiyorsanız kaynak grubunu koruyun.

Aksi takdirde, kaynaklarla işiniz bittiyse ücretlerden kaçınmak için oluşturduğunuz Azure kaynak grubunu silebilirsiniz.

Önemli

Bir kaynak grubunu silmek geri alınamaz. Kaynak grubunu sildiğinizde, içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. Tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunun içinde kaynakları oluşturduysanız, kaynak grubunu silmek yerine her kaynağı tek tek silebilirsiniz.

Kaynak grubunu silmek için

  1. Azure portalında oturum açın ve Kaynak grupları’nı seçin.

  2. Silmek istediğiniz kaynak grubunu seçin.

    Çok sayıda kaynak grubu varsa Herhangi bir alan için filtre uygula... kutusunu kullanın, bu makale için oluşturduğunuz kaynak grubunuzun adını yazın. Sonuçlar listesinden kaynak grubunu seçin.

    Çalışma bölmesinde silinecek kaynak gruplarının listesini gösteren ekran görüntüsü.

  3. Kaynak grubunu sil seçeneğini seçin.

  4. Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını yazın ve ardından Sil’i seçin.

    Silme işlemini onaylamak için kaynak adını gerektiren formu gösteren ekran görüntüsü.

Birkaç dakika sonra kaynak grubu ve bu gruptaki kaynakların tümü silinir.