Bagikan melalui


Mulai Cepat: Terhubung ke Azure Managed Redis di aplikasi Node.js

Dalam mulai cepat ini, Anda mempelajari cara menggunakan cache Azure Managed Redis dari aplikasi Node.js yang ditulis dalam bahasa TypeScript dan mengautentikasi koneksi Redis dengan menggunakan ID Microsoft Entra.

Prasyarat

  • Langganan Azure - buat akun secara gratis

  • Menginstal Node.js LTS

  • Instal TypeScript

  • Tambahkan paket yang digunakan dalam mulai cepat ini ke proyek Anda:

    npm install redis @redis/entraid @redis/client
    
  • Autentikasi ke Azure untuk lingkungan pengembangan Anda dengan Azure CLI:

    az login
    

Kode sampel Mulai Cepat dalam artikel ini tersedia di GitHub.

Membuat instans terkelola Azure Redis

Pertama, buat cache Azure Managed Redis di portal Microsoft Azure.

Saat Anda membuat cache, autentikasi ID Microsoft Entra diaktifkan secara default, yang membuatnya aman sejak awal. Untuk mulai cepat ini, cache menggunakan titik akhir publik. Dalam produksi, pertimbangkan untuk menggunakan titik akhir privat dan kontrol jaringan lainnya.

  1. Untuk membuat cache dengan portal, ikuti salah satu prosedur berikut:
  • Azure Managed Redis

    Secara opsional, Anda dapat membuat cache dengan menggunakan Azure CLI, PowerShell, atau alat mana pun yang Anda sukai.

  1. Beri diri Anda izin akses data di sumber daya Redis.

Kode untuk menyambungkan ke cache Redis

Di bagian pertama file sampel kode TypeScript, , index.tskonfigurasikan koneksi Anda ke cache:

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() Gunakan fungsi untuk membuat koneksi klien node-redis ke cache Redis.

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

Kode untuk menguji koneksi

Di bagian berikutnya, uji koneksi dengan menggunakan perintah Redis PING . Server Redis mengembalikan PONG.

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

Kode mengatur kunci, mendapatkan kunci

Di bagian ini, gunakan SET dan GET perintah untuk mulai menulis dan membaca data di cache Redis dengan cara yang paling sederhana.

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

Menjalankan kode

Buat dan jalankan aplikasi Node.js.

tsc
node index.js

Hasilnya terlihat seperti ini:

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

Di sini, Anda dapat melihat sampel kode ini secara keseluruhan.

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

        }
    }
}

Membersihkan sumber daya

Jika Anda ingin terus menggunakan sumber daya yang Anda buat di artikel ini, simpan grup sumber daya.

Jika tidak, jika Anda sudah selesai dengan sumber daya, Anda dapat menghapus grup sumber daya Azure yang Anda buat untuk menghindari biaya.

Penting

Penghapusan grup sumber daya tidak bisa dipulihkan. Ketika Anda menghapus grup sumber daya, semua sumber daya di dalamnya dihapus secara permanen. Pastikan Anda tidak salah menghapus grup sumber daya atau sumber daya secara tidak sengaja. Jika Anda membuat sumber daya di dalam grup sumber daya yang sudah ada yang berisi sumber daya yang ingin Anda simpan, Anda dapat menghapus setiap sumber daya satu per satu alih-alih menghapus grup sumber daya.

Untuk menghapus grup sumber daya

  1. Masuk ke portal Azure, lalu pilih Grup sumber daya.

  2. Pilih grup sumber daya yang ingin Anda hapus.

    Jika ada banyak grup sumber daya, gunakan kotak Filter untuk bidang apa pun... , ketik nama grup sumber daya yang Anda buat untuk artikel ini. Pilih grup sumber daya dalam daftar hasil.

    Cuplikan layar memperlihatkan daftar grup sumber daya yang akan dihapus di panel kerja.

  3. Pilih Hapus grup sumber daya.

  4. Anda diminta untuk mengonfirmasi penghapusan grup sumber daya. Ketik nama grup sumber daya Anda lagi untuk mengonfirmasi, lalu pilih Hapus.

    Cuplikan layar memperlihatkan formulir yang memerlukan nama sumber daya untuk mengonfirmasi penghapusan.

Setelah beberapa saat, grup sumber daya dan semua sumber dayanya akan dihapus.