全部产品
Search
文档中心

Tair (Redis® OSS-Compatible):Tutorial Koneksi Program Klien

更新时间:Nov 10, 2025

Instans Tair (Kompatibel dengan Redis OSS) sepenuhnya kompatibel dengan Redis open-source. Anda dapat terhubung ke instans Tair menggunakan klien apa pun yang sesuai dengan Redis, sama seperti cara Anda terhubung ke database Redis.

Prasyarat

Lakukan operasi berikut berdasarkan lokasi penyebaran klien Anda.

Lokasi Penyebaran Klien

Operasi yang Harus Dilakukan

Instance ECS (disarankan)

  1. Pastikan bahwa Elastic Compute Service (ECS) instance dan instans Tair berada dalam virtual private cloud (VPC) yang sama. Instans tersebut berada dalam VPC yang sama jika ID VPC mereka sama.

    Catatan
  2. Dapatkan alamat IP pribadi dari instance ECS.

  3. Anda dapat menambahkan alamat IP pribadi dari instance ECS ke daftar putihnya.

Lokal

  1. Dapatkan alamat IP publik dari perangkat lokal Anda. Perintah berikut menunjukkan cara mendapatkan alamat IP publik dari perangkat lokal di berbagai sistem operasi:

    • Linux: Buka terminal dan jalankan perintah curl ifconfig.me.

    • Windows: Buka Command Prompt dan jalankan perintah curl ip.me.

    • macOS: Buka terminal dan jalankan perintah curl ifconfig.me.

  2. Tambahkan alamat IP publik dari klien lokal ke daftar putih instans Tair.

  3. Secara default, instans Tair hanya menyediakan titik akhir internal. Jika Anda ingin terhubung ke instans Tair melalui Internet, Anda harus secara manual mengajukan titik akhir publik.

Catatan

Dapatkan Informasi Koneksi

Saat menggunakan klien untuk terhubung ke instans Tair (atau Redis Edisi Open-Source), Anda harus mendapatkan informasi berikut dan menyetelnya dalam kode Anda.

Informasi yang Harus Diperoleh

Cara Mendapatkannya

Titik akhir instans

Pergi ke halaman Instans, pilih wilayah di bilah navigasi atas, lalu klik ID instans target. Di bagian Connection Information, Anda dapat melihat titik akhir dan port untuk berbagai jenis koneksi.

Catatan

Instans mendukung beberapa jenis titik akhir. Kami sarankan Anda menggunakan titik akhir VPC untuk keamanan yang lebih tinggi dan latensi jaringan yang lebih rendah. Untuk informasi lebih lanjut, lihat Lihat titik akhir.

Port

Port default adalah 6379. Anda juga dapat menyesuaikan port. Untuk informasi lebih lanjut, lihat Ubah titik akhir atau port.

Akun instans (tidak diperlukan untuk beberapa klien)

Secara default, sebuah instans memiliki akun bernama setelah ID instans, seperti r-bp10noxlhcoim2****. Anda juga dapat membuat akun baru dan memberikan izin kepadanya. Untuk informasi lebih lanjut, lihat Buat dan kelola akun.

Kata sandi akun

Format kata sandi bervariasi berdasarkan akun yang dipilih:

  • Akun default (akun bernama setelah ID instans): Masukkan hanya kata sandi.

  • Akun yang baru dibuat: Format kata sandi adalah <user>:<password>. Sebagai contoh, jika akun kustom adalah testaccount dan kata sandinya adalah Rp829dlwa, Anda harus memasukkan testaccount:Rp829dlwa.

Catatan
  • Jika Anda menggunakan alat manajemen database pihak ketiga, seperti RDM, untuk terhubung ke instans, Anda harus memasukkan kata sandi dalam format user:password di bidang kata sandi.

  • Jika Anda lupa kata sandi Anda, Anda dapat menyetel ulang. Untuk informasi lebih lanjut, lihat Ubah atau reset kata sandi.

Contoh Klien Umum

Untuk daftar klien yang didukung oleh Tair (dan Redis Edisi Open-Source), lihat Klien Redis.

Penting

Bab ini hanya menyediakan contoh kode tentang cara menggunakan klien umum untuk terhubung ke Tair.

Jedis

Contoh ini menggunakan Maven untuk membuat proyek. Anda juga dapat mengunduh Jedis klien secara manual.

  1. Buka kompilator dan buat proyek.

  2. Tambahkan kode berikut ke file pom.xml.

    Contoh ini menggunakan Jedis 4.3.0.

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>4.3.0</version>
    </dependency>
  3. Masukkan kode berikut di editor dan modifikasi kode berdasarkan komentar.

    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();
            // Jumlah maksimum koneksi idle. Evaluasi nilai ini sesuai kebutuhan. Nilai ini tidak boleh melebihi jumlah maksimum koneksi yang didukung oleh instans Tair.
            config.setMaxIdle(200);
            // Jumlah maksimum koneksi. Evaluasi nilai ini sesuai kebutuhan. Nilai ini tidak boleh melebihi jumlah maksimum koneksi yang didukung oleh instans Tair.
            config.setMaxTotal(300);
            config.setTestOnBorrow(false);
            config.setTestOnReturn(false);
            // Ganti nilai parameter host dan password dengan titik akhir dan kata sandi instans.
            String host = "r-bp1s1bt2tlq3p1****pd.redis.rds.aliyuncs.com";
            // Untuk akun default, Anda dapat langsung memasukkan kata sandi. Untuk akun yang baru dibuat, kata sandi harus dalam format Akun:Kata Sandi. Contohnya, jika akun baru adalah testaccount dan kata sandinya adalah Rp829dlwa, masukkan testaccount:Rp829dlwa.
            String password = "r-bp1s1bt2tlq3p1****:Database123";
            JedisPool pool = new JedisPool(config, host, 6379, 3000, password);
            Jedis jedis = null;
            try {
                jedis = pool.getResource();
                // Lakukan operasi. Kode berikut memberikan contoh.
                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) {
                // Tangani timeout atau pengecualian lainnya.
                e.printStackTrace();
            }
            finally {
                if (jedis != null) {
                    jedis.close();
                }
            }
            pool.destroy();    // Saat aplikasi keluar dan sumber daya harus dihancurkan, panggil metode ini. Metode ini memutuskan koneksi dan melepaskan sumber daya.
        }
    }
  4. Jalankan proyek. Output berikut diharapkan:

    bar
    [bike, car]
    Penting

    Saat menggunakan Jedis, kesalahan mungkin terjadi jika Anda menyetel parameter tidak valid atau menggunakan beberapa fitur dengan cara yang salah. Untuk informasi tentang cara menyelesaikan kesalahan ini, lihat atau Kesalahan Umum.

PhpRedis

  1. Unduh dan instal PhpRedis klien.

  2. Masukkan kode berikut di editor PHP dan modifikasi kode berdasarkan komentar.

    Contoh ini menggunakan PHP 8.2.1 dan PhpRedis 5.3.7.

    <?php
     /* Ganti nilai parameter host dan port dengan titik akhir dan port instans. */
     $host = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com";
     $port = 6379;
     /* Ganti nilai parameter user dan pwd dengan akun dan kata sandi instans. */
     $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());
      }
      /* Setelah autentikasi selesai, Anda dapat melakukan operasi database. Kode berikut memberikan contoh tentang cara menggunakan SET dan GET. */
     if ($redis->set("foo", "bar") == false) {
             die($redis->getLastError());
     }
     $value = $redis->get("foo");
     echo $value;
     ?>
  3. Jalankan kode.

    Catatan

    Kesalahan umum dan solusi:

redis-py

  1. Unduh dan instal redis-py klien.

  2. Masukkan kode berikut di editor Python dan modifikasi kode berdasarkan komentar.

    Contoh ini menggunakan Python 3.9 dan redis-py 4.4.1.

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    import redis
    # Ganti nilai parameter host dan port dengan titik akhir dan port instans.
    host = 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com'
    port = 6379
    # Ganti nilai parameter pwd dengan kata sandi instans.
    # Untuk akun default, Anda dapat langsung memasukkan kata sandi. Untuk akun yang baru dibuat, kata sandi harus dalam format Akun:Kata Sandi. Contohnya, jika akun baru adalah testaccount dan kata sandinya adalah Rp829dlwa, masukkan testaccount:Rp829dlwa.
    pwd = 'testaccount:Rp829dlwa'
    r = redis.Redis(host=host, port=port, password=pwd)
    # Setelah koneksi dibuat, Anda dapat melakukan operasi database. Kode berikut memberikan contoh tentang cara menggunakan SET dan GET.
    r.set('foo', 'bar')
    print(r.get('foo'))
  3. Jalankan kode.

Spring Data Redis

Contoh ini menggunakan Maven untuk membuat proyek. Anda juga dapat mengunduh Lettuce atau Jedis klien secara manual.

  1. Buka kompilator dan buat proyek.

  2. Tambahkan berikut ini ke file pom dan unduh Lettuce atau Jedis.

    Penting

    Jika Anda menggunakan Lettuce, kami sarankan Anda menggunakan versi 6.3.0.RELEASE atau lebih baru dan atur parameter TCP_USER_TIMEOUT. Ini mencegah masalah penyaringan blackhole pada klien Lettuce.

    <?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/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.aliyun.tair</groupId>
        <artifactId>spring-boot-example</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>spring-boot-example</name>
        <description>Demo project for 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>
  3. Masukkan kode berikut di editor Spring Data Redis dan modifikasi kode berdasarkan komentar.

    Contoh ini menggunakan Spring Data Redis 2.4.2.

    • Spring Data Redis dengan Jedis

      @Bean
           JedisConnectionFactory redisConnectionFactory() {
               RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("host", port);
       
               JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
               // Jumlah maksimum koneksi. Atur parameter ini sesuai kebutuhan. Nilai ini tidak boleh melebihi jumlah maksimum koneksi yang didukung oleh tipe instans.
               jedisPoolConfig.setMaxTotal(30);
               // Jumlah maksimum koneksi idle. Atur parameter ini sesuai kebutuhan. Nilai ini tidak boleh melebihi jumlah maksimum koneksi yang didukung oleh tipe instans.
               jedisPoolConfig.setMaxIdle(20);
               // Nonaktifkan testOn[Borrow|Return] untuk mencegah perintah PING tambahan dihasilkan.
               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 pengaturan parameter TCP_USER_TIMEOUT)

      @Configuration
      public class BeanConfig {
          /**
           * Aktifkan TCP_KEEPALIVE dan konfigurasikan tiga parameter berikut:
           *  TCP_KEEPIDLE = 30
           *  TCP_KEEPINTVL = 10
           *  TCP_KEEPCNT = 3
           */
          private static final int TCP_KEEPALIVE_IDLE = 30;
      
          /**
           * Parameter TCP_USER_TIMEOUT dapat mencegah Lettuce terus mengalami timeout dalam kasus kegagalan atau kerusakan.
           * refer: 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");
      
              // Konfigurasi TCP KeepAlive
              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;
          }
      }
  4. Jalankan kode.

C atau C++

  1. Unduh dan instal Klien C.

  2. Masukkan kode berikut di editor C atau C++ dan modifikasi kode berdasarkan komentar.

    Contoh ini menggunakan HiRedis 1.1.0.

    #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 server */
        reply = redisCommand(c,"PING");
        printf("PING: %s\n", reply->str);
        freeReplyObject(reply);
        /* Set sebuah key */
        reply = redisCommand(c,"SET %s %s", "foo", "hello world");
        printf("SET: %s\n", reply->str);
        freeReplyObject(reply);
        /* Set sebuah key menggunakan API aman biner */
        reply = redisCommand(c,"SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5);
        printf("SET (binary API): %s\n", reply->str);
        freeReplyObject(reply);
        /* Cobalah GET dan dua INCR */
        reply = redisCommand(c,"GET foo");
        printf("GET foo: %s\n", reply->str);
        freeReplyObject(reply);
        reply = redisCommand(c,"INCR counter");
        printf("INCR counter: %lld\n", reply->integer);
        freeReplyObject(reply);
        /* lagi ... */
        reply = redisCommand(c,"INCR counter");
        printf("INCR counter: %lld\n", reply->integer);
        freeReplyObject(reply);
        /* Buat daftar angka, dari 0 hingga 9 */
        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);
            }
        /* Mari kita periksa apa yang ada di dalam daftar */
        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 kode.

    gcc -o example -g example.c -I /usr/local/include/hiredis -lhiredis
  4. Jalankan tes untuk membangun koneksi.

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

.NET

  1. Unduh dan instal versi 2.7.20 atau lebih baru dari StackExchange.Redis klien. Untuk informasi lebih lanjut, lihat Pemberitahuan tentang Pembaruan StackExchange.Redis.

    Penting

    Kami sarankan Anda tidak menggunakan klien ServiceStack Redis atau CSRedis.

    • Jika Anda menggunakan ServiceStack Redis dan menemui masalah terkait klien, Anda harus membeli dukungan teknis dari ServiceStack.

    • Dukungan untuk klien CSRedis telah diakhiri.

  2. Masukkan kode berikut di editor StackExchange.Redis dan modifikasi kode berdasarkan komentar.

    Contoh ini menggunakan StackExchange.Redis 2.7.20.

    using StackExchange.Redis;
     // Atur titik akhir, port, dan kata sandi instans.
     private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379,password=testaccount:Rp829dlwa,connectTimeout=2000");
      // kunci untuk singleton
     private static readonly object Locker = new object();
      //singleton
     private static ConnectionMultiplexer redisConn;
     //singleton
     public static ConnectionMultiplexer getRedisConn()
     {
         if (redisConn == null)
         {
             lock (Locker)
             {
                 if (redisConn == null || !redisConn.IsConnected)
                 {
                     redisConn = ConnectionMultiplexer.Connect(configurationOptions);
                 }
             }
         }
         return redisConn;
     }
    Catatan
    • ConfigurationOptions adalah inti dari StackExchange.Redis. Ini dibagikan dan digunakan kembali oleh seluruh aplikasi. Anda harus mengonfigurasinya sebagai singleton. Untuk informasi lebih lanjut tentang parameter, lihat ConfigurationOptions.

    • Objek yang dikembalikan oleh GetDatabase() ringan. Anda bisa mendapatkannya dari objek ConnectionMultiplexer setiap kali Anda menggunakannya.

       redisConn = getRedisConn();
       var db = redisConn.GetDatabase();
  3. Gunakan klien untuk melakukan operasi pada struktur data umum. Contoh:

    String

    //set get
    string strKey = "hello";
    string strValue = "world";
    bool setResult = db.StringSet(strKey, strValue);
    Console.WriteLine("set " + strKey + " " + strValue + ", result is " + setResult);
    //incr
    string counterKey = "counter";
    long counterValue = db.StringIncrement(counterKey);
    Console.WriteLine("incr " + counterKey + ", result is " + counterValue);
    //expire
    db.KeyExpire(strKey, new TimeSpan(0, 0, 5));
    Thread.Sleep(5 * 1000);
    Console.WriteLine("expire " + strKey + ", after 5 seconds, value is " + db.StringGet(strKey));
    //mset mget
    KeyValuePair<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.ToString() + " " + kv2.Key.ToString() + ", result is " + values[0] + "&&" + values[1]);

    Hash

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

    List

    //list key
    string listKey = "myList";
    //rpush
    db.ListRightPush(listKey, "a");
    db.ListRightPush(listKey, "b");
    db.ListRightPush(listKey, "c");
    //lrange
    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

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

    Sorted Set

    string sortedSetKey = "myZset";
    //sadd
    db.SortedSetAdd(sortedSetKey, "xiaoming", 85);
    db.SortedSetAdd(sortedSetKey, "xiaohong", 100);
    db.SortedSetAdd(sortedSetKey, "xiaofei", 62);
    db.SortedSetAdd(sortedSetKey, "xiaotang", 73);
    //zrevrangebyscore
    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();

node-redis

  1. Unduh dan instal node-redis klien.

  2. Masukkan kode berikut di klien node-redis dan modifikasi kode berdasarkan komentar.

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

    import { createClient } from 'redis';
    
    // Atur port, titik akhir, akun, dan kata sandi instans.
    const host = 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com';
    const port = 6379;
    const username = 'testaccount';
    // Jika kata sandi berisi karakter khusus seperti !@#$%^&*()+-=_, kami sarankan Anda menggunakan encodeURIComponent untuk mengkodekan kata sandi. Contoh: 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();
    Catatan

    Jika pesan kesalahan SyntaxError: Cannot use import statement outside a module dilaporkan, ubah ekstensi file dari .js menjadi .mjs dan tambahkan opsi --experimental-modules saat Anda membuat panggilan. Contohnya: node --experimental-modules redis.mjs.

  3. Jalankan kode.

go-redis

  1. Unduh dan instal go-redis klien.

  2. Masukkan kode berikut di editor go-redis dan modifikasi kode berdasarkan komentar.

    Contoh ini menggunakan Go 1.18.5 dan go-redis 8.11.5.

    package main
    
    import (
    	"github.com/go-redis/redis"
    	"fmt"
    )
    
    func ExampleClient() {
    	client := redis.NewClient(&redis.Options{
            // Ganti placeholder dengan titik akhir dan port instans.
    		Addr:     "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379",
            // Ganti placeholder dengan kata sandi instans.
    		Password: "testaccount:Rp829dlwa",
    		DB:       0,  // gunakan DB default
    	})
        // Kode berikut memberikan contoh tentang cara menggunakan SET dan GET.
    	err := client.Set("foo", "bar", 0).Err()
    	if err != nil {
    		panic(err)
    	}
    
    	val, err := client.Get("foo").Result()
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println("set : foo -> ", val)
    }
    
    func main() {
    	ExampleClient()
    }
  3. Jalankan kode.

Lettuce

Proyek sampel berikut dibuat menggunakan Maven. Anda juga dapat mengunduh Lettuce klien secara manual.

  1. Buka kompilator dan buat proyek.

  2. Tambahkan dependensi berikut ke file pom.xml dan unduh Lettuce 6.3.0. Kami sarankan Anda tidak menggunakan versi Lettuce sebelum 6.3.0.

    Dalam contoh ini, Lettuce 6.3.0 digunakan.

    <<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>
  3. Masukkan kode berikut di editor dan modifikasi kode berdasarkan komentar:

    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 dan konfigurasikan tiga parameter berikut:
         *  TCP_KEEPIDLE = 30
         *  TCP_KEEPINTVL = 10
         *  TCP_KEEPCNT = 3
         */
        private static final int TCP_KEEPALIVE_IDLE = 30;
    
        /**
         * Parameter TCP_USER_TIMEOUT dapat menghindari situasi di mana Lettuce tetap macet dalam loop timeout terus-menerus selama kegagalan atau kejadian crash. 
         * refer: 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 nilai host, user, password, dan port dengan informasi instans aktual. 
            String host = "r-bp1s1bt2tlq3p1****.redis.rds.aliyuncs.com";
            String user = "r-bp1s1bt2tlq3p1****";
            String password = "Da****3";
            int port = 6379;
    
            // Konfigurasi RedisURI
            RedisURI uri = RedisURI.Builder
                    .redis(host, port)
                    .withAuthentication(user, password)
                    .build();
    
            // Konfigurasi TCP KeepAlive
            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"));
    
            // Jika aplikasi Anda keluar dan Anda ingin menghancurkan sumber daya, panggil metode ini. Kemudian, koneksi ditutup, dan sumber daya dilepaskan. 
            connection.close();
            client.shutdown();
        }
    }
  4. Jalankan kode tersebut. Output berikut diharapkan pada penyelesaian yang berhasil:

    OK
    bar