All Products
Search
Document Center

Tair (Redis® OSS-Compatible):Menghubungkan ke instans menggunakan kode klien

Last Updated:Jul 10, 2026

Instans Tair (kompatibel dengan Redis OSS) sepenuhnya kompatibel dengan Redis open-source. Anda dapat menghubungkannya menggunakan klien apa pun yang kompatibel dengan Redis, sama seperti saat menghubungkan ke database Redis.

Prasyarat

Lengkapi langkah-langkah berikut sesuai dengan lokasi tempat klien Anda dijalankan.

Jika klien Anda dijalankan pada instans ECS (disarankan):

  1. Pastikan instans Elastic Compute Service (ECS) dan instans Tair berada dalam virtual private cloud (VPC) yang sama. Instans berada dalam VPC yang sama jika ID VPC-nya cocok.

    Catatan

    Jika instans berada dalam VPC yang berbeda, ubah VPC instans ECS. Jika instans ECS berada dalam jaringan klasik dan instans Tair berada dalam VPC, lihat Menghubungkan instans ECS ke instans Redis saat berada dalam jenis jaringan yang berbeda.

  2. Dapatkan alamat IP internal instans ECS.

  3. Tambahkan alamat IP pribadi instans ECS ke daftar putih.

Jika klien Anda dijalankan secara lokal:

  1. Dapatkan alamat IP publik mesin Anda:

    • Linux / macOS: Jalankan curl ifconfig.me di terminal.

    • Windows: Jalankan curl ip.me di Command Prompt.

  2. Tambahkan alamat IP publik ke daftar putih instans Tair.

  3. Ajukan titik akhir publik. Secara default, instans Tair hanya menyediakan titik akhir internal.

Catatan penggunaan

  • Arsitektur kluster dan pemisahan baca/tulis: Keduanya menyediakan titik akhir node proxy secara default. Hubungkan ke instans ini dengan cara yang sama seperti saat menghubungkan ke instans arsitektur standar.

    Saat menghubungkan melalui titik akhir koneksi langsung, gunakan metode yang sama seperti saat menghubungkan ke kluster Redis open-source.
  • Akses tanpa kata sandi: Jika akses tanpa kata sandi melalui VPC diaktifkan, klien dalam VPC yang sama dapat terhubung tanpa kata sandi.

Dapatkan informasi koneksi

Sebelum menulis kode, kumpulkan detail koneksi berikut dari halaman Instances. Pilih wilayah Anda di bilah navigasi atas, klik ID instans, lalu buka bagian Connection Information.

Detail

Cara mendapatkannya

Endpoint

Lihat endpoint dan port di bagian Connection Information. Gunakan endpoint VPC untuk keamanan yang lebih baik dan latensi lebih rendah. Lihat Lihat endpoint.

Port

Default adalah 6379. Untuk mengubahnya, lihat Ubah endpoint atau port.

Account

Secara default, setiap instans memiliki akun yang dinamai sesuai dengan ID instans (misalnya, r-bp10noxlhcoim2****). Untuk membuat akun tambahan, lihat Buat dan kelola akun.

Password

Formatnya bergantung pada jenis akun: akun default — masukkan kata sandi secara langsung; akun kustom — gunakan format <username>:<password> (misalnya, testaccount:Rp829dlwa).

Saat menggunakan alat pihak ketiga seperti Remote Desktop Manager (RDM), masukkan kata sandi dalam format username:password. Untuk mengatur ulang kata sandi yang lupa, lihat Ubah atau atur ulang kata sandi.

Pilih klien

Pilih klien sesuai bahasa pemrograman Anda. Semua contoh pada bagian berikutnya terhubung ke instans Tair yang sama.

Bahasa

Klien

Gaya API

Catatan

Java

Jedis

Sinkron

Pooling koneksi melalui JedisPool

Java

Lettuce

Async dan reaktif

Gunakan versi 6.3.0.RELEASE atau yang lebih baru

Java

Spring Data Redis

Sinkron atau async

Mendukung backend Jedis dan Lettuce

Python

redis-py

Sinkron

Klien Python resmi

Node.js

node-redis

Async

Klien Node.js resmi

Go

go-redis

Sinkron

Klien Go yang banyak digunakan

PHP

PhpRedis

Sinkron

Ekstensi C untuk PHP

C / C++

hiredis

Sinkron

Klien C minimalis

.NET

StackExchange.Redis

Sinkron

Gunakan versi 2.7.20 atau yang lebih baru

Untuk daftar lengkap klien yang didukung, lihat Redis Clients.

Penting

Jangan gunakan klien ServiceStack Redis atau CSRedis. Masalah pada ServiceStack Redis memerlukan pembelian dukungan langsung dari ServiceStack, dan dukungan CSRedis telah dihentikan.

Hubungkan dan uji

Contoh berikut menunjukkan kode minimum yang diperlukan untuk terhubung dan menjalankan perintah SET/GET. Ganti semua nilai placeholder dengan detail koneksi aktual Anda.

Jedis

Contoh ini menggunakan Jedis 4.3.0.

Contoh ini menggunakan Maven. Anda juga dapat mengunduh file JAR Jedis secara langsung.

  1. Tambahkan dependensi ke pom.xml:

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>4.3.0</version>
    </dependency>
  2. Hubungkan dan jalankan perintah:

    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    public class JedisExample {
        public static void main(String[] args) {
            JedisPoolConfig config = new JedisPoolConfig();
            // Maksimum koneksi idle — tidak boleh melebihi batas koneksi instans
            config.setMaxIdle(200);
            // Maksimum total koneksi — tidak boleh melebihi batas koneksi instans
            config.setMaxTotal(300);
            config.setTestOnBorrow(false);
            config.setTestOnReturn(false);
    
            // Ganti dengan endpoint dan kata sandi instans Anda
            String host = "r-bp1s1bt2tlq3p1****pd.redis.rds.aliyuncs.com";
            // Akun default: masukkan kata sandi secara langsung
            // Akun kustom: gunakan format "username:password"
            String password = "r-bp1s1bt2tlq3p1****:Database123";
    
            JedisPool pool = new JedisPool(config, host, 6379, 3000, password);
            Jedis jedis = null;
            try {
                jedis = pool.getResource();
                jedis.set("foo10", "bar");
                System.out.println(jedis.get("foo10"));
                jedis.zadd("sose", 0, "car");
                jedis.zadd("sose", 0, "bike");
                System.out.println(jedis.zrange("sose", 0, -1));
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (jedis != null) {
                    jedis.close();
                }
            }
            // Panggil ini saat mematikan aplikasi Anda untuk melepas sumber daya
            pool.destroy();
        }
    }
  3. Output yang diharapkan:

    bar
    [bike, car]
Penting

Untuk error Jedis yang disebabkan oleh parameter tidak valid atau penggunaan fitur yang tidak tepat, lihat Error umum.

Lettuce

Contoh ini menggunakan Lettuce 6.3.0.RELEASE.

Penting

Gunakan Lettuce 6.3.0.RELEASE atau yang lebih baru dan atur parameter TCP_USER_TIMEOUT. Ini mencegah masalah blackhole filtering pada klien Lettuce.

Contoh ini menggunakan Maven. Anda juga dapat mengunduh file JAR Lettuce secara langsung.

  1. Tambahkan dependensi berikut ke pom.xml:

    <dependencies>
        <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
            <version>6.3.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-transport-native-epoll</artifactId>
            <version>4.1.100.Final</version>
            <classifier>linux-x86_64</classifier>
        </dependency>
    </dependencies>
  2. Hubungkan dan jalankan perintah:

    import io.lettuce.core.ClientOptions;
    import io.lettuce.core.RedisClient;
    import io.lettuce.core.RedisURI;
    import io.lettuce.core.SocketOptions;
    import io.lettuce.core.SocketOptions.KeepAliveOptions;
    import io.lettuce.core.SocketOptions.TcpUserTimeoutOptions;
    import io.lettuce.core.api.StatefulRedisConnection;
    import io.lettuce.core.api.sync.RedisCommands;
    import java.time.Duration;
    
    public class LettuceExample {
        /**
         * Aktifkan TCP keepalive dengan pengaturan berikut:
         *   TCP_KEEPIDLE  = 30 detik
         *   TCP_KEEPINTVL = 10 detik
         *   TCP_KEEPCNT   = 3
         */
        private static final int TCP_KEEPALIVE_IDLE = 30;
    
        /**
         * TCP_USER_TIMEOUT mencegah Lettuce terjebak dalam loop timeout
         * saat terjadi kegagalan atau crash. Lihat: https://github.com/lettuce-io/lettuce-core/issues/2082
         */
        private static final int TCP_USER_TIMEOUT = 30;
    
        private static RedisClient client = null;
        private static StatefulRedisConnection<String, String> connection = null;
    
        public static void main(String[] args) {
            // Ganti dengan informasi instans aktual Anda
            String host     = "r-bp1s1bt2tlq3p1****.redis.rds.aliyuncs.com";
            String user     = "r-bp1s1bt2tlq3p1****";
            String password = "Da****3";
            int    port     = 6379;
    
            // Bangun RedisURI
            RedisURI uri = RedisURI.Builder
                    .redis(host, port)
                    .withAuthentication(user, password)
                    .build();
    
            // Konfigurasikan TCP keepalive dan TCP_USER_TIMEOUT
            SocketOptions socketOptions = SocketOptions.builder()
                    .keepAlive(KeepAliveOptions.builder()
                            .enable()
                            .idle(Duration.ofSeconds(TCP_KEEPALIVE_IDLE))
                            .interval(Duration.ofSeconds(TCP_KEEPALIVE_IDLE / 3))
                            .count(3)
                            .build())
                    .tcpUserTimeout(TcpUserTimeoutOptions.builder()
                            .enable()
                            .tcpUserTimeout(Duration.ofSeconds(TCP_USER_TIMEOUT))
                            .build())
                    .build();
    
            client = RedisClient.create(uri);
            client.setOptions(ClientOptions.builder()
                    .socketOptions(socketOptions)
                    .build());
    
            connection = client.connect();
            RedisCommands<String, String> commands = connection.sync();
    
            System.out.println(commands.set("foo", "bar"));
            System.out.println(commands.get("foo"));
    
            // Matikan — tutup koneksi dan lepaskan sumber daya
            connection.close();
            client.shutdown();
        }
    }
  3. Output yang diharapkan:

    OK
    bar

Spring Data Redis

Contoh ini menggunakan Spring Data Redis 2.4.2.

Penting

Gunakan Lettuce versi 6.3.0.RELEASE atau yang lebih baru dan atur TCP_USER_TIMEOUT untuk mencegah masalah blackhole filtering.

Contoh ini menggunakan Maven dengan Lettuce atau Jedis sebagai backend koneksi.

  1. Tambahkan berikut ke pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.2</version>
            <relativePath/>
        </parent>
        <groupId>com.aliyun.tair</groupId>
        <artifactId>spring-boot-example</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>spring-boot-example</name>
        <description>Proyek demo untuk Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </dependency>
            <dependency>
                <groupId>io.lettuce</groupId>
                <artifactId>lettuce-core</artifactId>
                <version>6.3.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-native-epoll</artifactId>
                <version>4.1.100.Final</version>
                <classifier>linux-x86_64</classifier>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
  2. Konfigurasikan factory koneksi. Pilih Jedis atau Lettuce: Spring Data Redis dengan Jedis:

    @Bean
    JedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("host", port);
    
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // Maksimum total koneksi — tidak boleh melebihi batas koneksi instans
        jedisPoolConfig.setMaxTotal(30);
        // Maksimum koneksi idle — tidak boleh melebihi batas koneksi instans
        jedisPoolConfig.setMaxIdle(20);
        // Nonaktifkan testOn[Borrow|Return] untuk menghindari perintah PING tambahan
        jedisPoolConfig.setTestOnBorrow(false);
        jedisPoolConfig.setTestOnReturn(false);
    
        JedisClientConfiguration jedisClientConfiguration = JedisClientConfiguration.builder()
            .usePooling()
            .poolConfig(jedisPoolConfig)
            .build();
    
        return new JedisConnectionFactory(config, jedisClientConfiguration);
    }

    Spring Data Redis dengan Lettuce (termasuk TCP_USER_TIMEOUT):

    @Configuration
    public class BeanConfig {
        /**
         * Aktifkan TCP keepalive dengan pengaturan berikut:
         *   TCP_KEEPIDLE  = 30 detik
         *   TCP_KEEPINTVL = 10 detik
         *   TCP_KEEPCNT   = 3
         */
        private static final int TCP_KEEPALIVE_IDLE = 30;
    
        /**
         * TCP_USER_TIMEOUT mencegah Lettuce terjebak dalam loop timeout
         * saat terjadi kegagalan atau crash. Lihat: https://github.com/lettuce-io/lettuce-core/issues/2082
         */
        private static final int TCP_USER_TIMEOUT = 30;
    
        @Bean
        LettuceConnectionFactory redisConnectionFactory() {
            RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
            config.setHostName("r-bp1y4is8svonly****pd.redis.rds.aliyuncs.com");
            config.setPort(6379);
            config.setUsername("r-bp1y4is8svonly****");
            config.setPassword("Da****3");
    
            SocketOptions socketOptions = SocketOptions.builder()
                .keepAlive(KeepAliveOptions.builder()
                    .enable()
                    .idle(Duration.ofSeconds(TCP_KEEPALIVE_IDLE))
                    .interval(Duration.ofSeconds(TCP_KEEPALIVE_IDLE / 3))
                    .count(3)
                    .build())
                .tcpUserTimeout(TcpUserTimeoutOptions.builder()
                    .enable()
                    .tcpUserTimeout(Duration.ofSeconds(TCP_USER_TIMEOUT))
                    .build())
                .build();
    
            LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder()
                .clientOptions(ClientOptions.builder().socketOptions(socketOptions).build())
                .build();
    
            return new LettuceConnectionFactory(config, lettuceClientConfiguration);
        }
    
        @Bean
        RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(connectionFactory);
            return template;
        }
    }
  3. Jalankan kode tersebut.

redis-py

Contoh ini menggunakan Python 3.9 dan redis-py 4.4.1.

  1. Unduh dan instal klien redis-py.

  2. Hubungkan dan jalankan perintah:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import redis
    
    # Ganti dengan endpoint dan port instans Anda
    host = 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com'
    port = 6379
    # Akun default: masukkan kata sandi secara langsung
    # Akun kustom: gunakan format "username:password"
    pwd = 'testaccount:Rp829dlwa'
    
    r = redis.Redis(host=host, port=port, password=pwd)
    r.set('foo', 'bar')
    print(r.get('foo'))
  3. Jalankan skrip tersebut.

node-redis

Contoh ini menggunakan Node.js 19.4.0 dan node-redis 4.5.1.

  1. Unduh dan instal node-redis.

  2. Hubungkan dan jalankan perintah:

    import { createClient } from 'redis';
    
    // Ganti dengan endpoint, port, akun, dan kata sandi instans Anda
    const host = 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com';
    const port = 6379;
    const username = 'testaccount';
    // Jika kata sandi mengandung karakter khusus (!@#$%^&*()+-=_), encode terlebih dahulu:
    // password = encodeURIComponent(password)
    const password = 'Rp829dlwa';
    
    const client = createClient({
      // redis://[[username]:[password]@[host][:port]/[db-number]
      url: `redis://${username}:${password}@${host}:${port}/0`
    });
    
    client.on('error', (err) => console.log('Redis Client Error', err));
    
    await client.connect();
    
    await client.set('foo', 'bar');
    const value = await client.get('foo');
    console.log("get foo: %s", value);
    
    await client.disconnect();
  3. Jalankan skrip tersebut.

Jika Anda melihat SyntaxError: Cannot use import statement outside a module, ubah nama file dari .js menjadi .mjs dan jalankan dengan node --experimental-modules redis.mjs.

go-redis

Contoh ini menggunakan Go 1.21 dan go-redis v9.18.0. Untuk lingkungan produksi, sangat penting untuk menyesuaikan pengaturan kolam koneksi (PoolSize, MinIdleConns) agar sesuai dengan kebutuhan konkurensi aplikasi Anda dan batas koneksi instans Redis Anda.

  1. Unduh dan instal klien go-redis.

  2. Hubungkan dan jalankan perintah:

    package main
    
    import (
    	"context"
    	"fmt"
    	"time"
    
    	"github.com/redis/go-redis/v9"
    )
    
    var ctx = context.Background()
    
    func ExampleClient() {
    	client := redis.NewClient(&redis.Options{
    		// Ganti dengan endpoint dan port instans Anda.
    		Addr: "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379",
    		// Ganti dengan kata sandi instans Anda.
    		Password: "testaccount:Rp829dlwa",
    		DB:       0, // Gunakan DB default.
    
    		// Pengaturan kolam koneksi. Sesuaikan ini untuk workload Anda, dan jangan melebihi batas koneksi maksimum instans.
    		PoolSize:     20,              // Jumlah maksimum koneksi. Nilai yang disarankan: QPS puncak / QPS per koneksi, atau sekitar 10 x jumlah core CPU.
    		MinIdleConns: 5,               // Jumlah minimum koneksi idle. Memanaskan kolam sebelumnya untuk menyerap lonjakan traffic tanpa dial baru.
    		PoolTimeout:  4 * time.Second, // Waktu tunggu saat meminjam koneksi dari kolam. Atur sedikit lebih besar dari ReadTimeout.
    		ConnMaxIdleTime:  5 * time.Minute, // Waktu penutupan koneksi idle. Harus kurang dari idle timeout instans (default 600 detik).
    
    		// Pengaturan jaringan dan retry.
    		DialTimeout:  5 * time.Second, // Timeout untuk membangun koneksi TCP.
    		ReadTimeout:  3 * time.Second, // Timeout baca. -1 menonaktifkan timeout, 0 menggunakan default.
    		WriteTimeout: 3 * time.Second, // Timeout tulis.
    		MaxRetries:   3,               // Jumlah retry perintah saat gagal. -1 menonaktifkan retry.
    	})
    	defer client.Close()
    
    	// Kode berikut menunjukkan contoh SET/GET.
    	if err := client.Set(ctx, "foo", "bar", 0).Err(); err != nil {
    		panic(err)
    	}
    
    	val, err := client.Get(ctx, "foo").Result()
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println("set : foo -> ", val)
    }
    
    func main() {
    	ExampleClient()
    }
  3. Jalankan kode tersebut.

PhpRedis

Contoh ini menggunakan PHP 8.2.1 dan PhpRedis 5.3.7.

  1. Unduh dan instal klien PhpRedis.

  2. Hubungkan dan jalankan perintah:

    <?php
    // Ganti dengan endpoint dan port instans Anda
    $host = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com";
    $port = 6379;
    // Ganti dengan akun dan kata sandi Anda
    $user = "testaccount";
    $pwd = "Rp829dlwa";
    
    $redis = new Redis();
    if ($redis->connect($host, $port) == false) {
        die($redis->getLastError());
    }
    if ($redis->auth([$user, $pwd]) == false) {
        die($redis->getLastError());
    }
    if ($redis->set("foo", "bar") == false) {
        die($redis->getLastError());
    }
    $value = $redis->get("foo");
    echo $value;
    ?>
  3. Jalankan skrip tersebut.

Error umum:
Cannot assign requested address: Lihat Error "Cannot assign requested address".
redis protocol error, got ' ' as reply type byte: Tingkatkan klien PhpRedis Anda. Lihat phpredis/phpredis#1585.

C atau C++

Contoh ini menggunakan hiredis 1.1.0.

  1. Unduh dan instal hiredis.

  2. Tulis kode berikut:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <hiredis.h>
    
    int main(int argc, char **argv) {
        unsigned int j;
        redisContext *c;
        redisReply *reply;
    
        if (argc < 4) {
            printf("Usage: example r-bp10noxlhcoim2****.redis.rds.aliyuncs.com 6379 instance_id password\n");
            exit(0);
        }
    
        const char *hostname    = argv[1];
        const int   port        = atoi(argv[2]);
        const char *instance_id = argv[3];
        const char *password    = argv[4];
    
        struct timeval timeout = { 1, 500000 }; // 1.5 detik
        c = redisConnectWithTimeout(hostname, port, timeout);
        if (c == NULL || c->err) {
            if (c) {
                printf("Connection error: %s\n", c->errstr);
                redisFree(c);
            } else {
                printf("Connection error: can't allocate redis context\n");
            }
            exit(1);
        }
    
        /* AUTH */
        reply = redisCommand(c, "AUTH %s", password);
        printf("AUTH: %s\n", reply->str);
        freeReplyObject(reply);
    
        /* PING */
        reply = redisCommand(c, "PING");
        printf("PING: %s\n", reply->str);
        freeReplyObject(reply);
    
        /* SET and GET */
        reply = redisCommand(c, "SET %s %s", "foo", "hello world");
        printf("SET: %s\n", reply->str);
        freeReplyObject(reply);
    
        reply = redisCommand(c, "SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5);
        printf("SET (binary API): %s\n", reply->str);
        freeReplyObject(reply);
    
        reply = redisCommand(c, "GET foo");
        printf("GET foo: %s\n", reply->str);
        freeReplyObject(reply);
    
        /* INCR */
        reply = redisCommand(c, "INCR counter");
        printf("INCR counter: %lld\n", reply->integer);
        freeReplyObject(reply);
    
        reply = redisCommand(c, "INCR counter");
        printf("INCR counter: %lld\n", reply->integer);
        freeReplyObject(reply);
    
        /* Operasi list */
        reply = redisCommand(c, "DEL mylist");
        freeReplyObject(reply);
        for (j = 0; j < 10; j++) {
            char buf[64];
            snprintf(buf, 64, "%d", j);
            reply = redisCommand(c, "LPUSH mylist element-%s", buf);
            freeReplyObject(reply);
        }
        reply = redisCommand(c, "LRANGE mylist 0 -1");
        if (reply->type == REDIS_REPLY_ARRAY) {
            for (j = 0; j < reply->elements; j++) {
                printf("%u) %s\n", j, reply->element[j]->str);
            }
        }
        freeReplyObject(reply);
    
        /* Putuskan koneksi dan bebaskan konteks */
        redisFree(c);
        return 0;
    }
  3. Kompilasi:

    gcc -o example -g example.c -I /usr/local/include/hiredis -lhiredis
  4. Jalankan:

    ./example r-bp10noxlhcoim2****.redis.rds.aliyuncs.com 6379 r-bp10noxlhcoim2**** password

.NET (StackExchange.Redis)

Contoh ini menggunakan StackExchange.Redis 2.7.20.

Penting

Gunakan versi 2.7.20 atau yang lebih baru. Lihat Pemberitahuan tentang pembaruan StackExchange.Redis.

  1. Unduh dan instal StackExchange.Redis.

  2. Siapkan singleton ConnectionMultiplexer:

    ConfigurationOptions harus dikonfigurasi sebagai singleton dan dibagikan di seluruh aplikasi Anda. Untuk semua parameter yang tersedia, lihat ConfigurationOptions. Objek IDatabase yang dikembalikan oleh GetDatabase() bersifat ringan — buat setiap kali digunakan dari ConnectionMultiplexer: ``csharp redisConn = GetRedisConn(); var db = redisConn.GetDatabase(); ``
    using StackExchange.Redis;
    
    // Atur endpoint, port, dan kata sandi
    private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse(
        "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379,password=testaccount:Rp829dlwa,connectTimeout=2000"
    );
    
    private static readonly object Locker = new object();
    private static ConnectionMultiplexer redisConn;
    
    public static ConnectionMultiplexer GetRedisConn()
    {
        if (redisConn == null)
        {
            lock (Locker)
            {
                if (redisConn == null || !redisConn.IsConnected)
                {
                    redisConn = ConnectionMultiplexer.Connect(configurationOptions);
                }
            }
        }
        return redisConn;
    }
  3. Jalankan perintah pada tipe data umum: String:

    String

    // SET dan GETstring strKey = "hello";string strValue = "world";bool setResult = db.StringSet(strKey, strValue);Console.WriteLine("set " + strKey + " " + strValue + ", result is " + setResult);// INCRstring counterKey = "counter";long counterValue = db.StringIncrement(counterKey);Console.WriteLine("incr " + counterKey + ", result is " + counterValue);// EXPIREdb.KeyExpire(strKey, new TimeSpan(0, 0, 5));Thread.Sleep(5 * 1000);Console.WriteLine("expire " + strKey + ", after 5 seconds, value is " + db.StringGet(strKey));// MSET dan MGETKeyValuePair<RedisKey, RedisValue> kv1 = new KeyValuePair<RedisKey, RedisValue>("key1", "value1");KeyValuePair<RedisKey, RedisValue> kv2 = new KeyValuePair<RedisKey, RedisValue>("key2", "value2");db.StringSet(new KeyValuePair<RedisKey, RedisValue>[] { kv1, kv2 });RedisValue[] values = db.StringGet(new RedisKey[] { kv1.Key, kv2.Key });Console.WriteLine("mget " + kv1.Key + " " + kv2.Key + ", result is " + values[0] + "&&" + values[1]);

    Hash

    string hashKey = "myhash";db.HashSet(hashKey, "f1", "v1");db.HashSet(hashKey, "f2", "v2");HashEntry[] values = db.HashGetAll(hashKey);Console.Write("hgetall " + hashKey + ", result is");for (int i = 0; i < values.Length; i++){    HashEntry hashEntry = values[i];    Console.Write(" " + hashEntry.Name + " " + hashEntry.Value);}Console.WriteLine();

    List

    string listKey = "myList";db.ListRightPush(listKey, "a");db.ListRightPush(listKey, "b");db.ListRightPush(listKey, "c");RedisValue[] values = db.ListRange(listKey, 0, -1);Console.Write("lrange " + listKey + " 0 -1, result is ");for (int i = 0; i < values.Length; i++){    Console.Write(values[i] + " ");}Console.WriteLine();

    Set

    string setKey = "mySet";db.SetAdd(setKey, "a");db.SetAdd(setKey, "b");db.SetAdd(setKey, "c");bool isContains = db.SetContains(setKey, "a");Console.WriteLine("set " + setKey + " contains a is " + isContains);

    Sorted Set

    string sortedSetKey = "myZset";db.SortedSetAdd(sortedSetKey, "xiaoming", 85);db.SortedSetAdd(sortedSetKey, "xiaohong", 100);db.SortedSetAdd(sortedSetKey, "xiaofei", 62);db.SortedSetAdd(sortedSetKey, "xiaotang", 73);RedisValue[] names = db.SortedSetRangeByRank(sortedSetKey, 0, 2, Order.Ascending);Console.Write("zrevrangebyscore " + sortedSetKey + " 0 2, result is ");for (int i = 0; i < names.Length; i++){    Console.Write(names[i] + " ");}Console.WriteLine();

Langkah selanjutnya