すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):クライアントを使用したインスタンスへの接続

最終更新日:Nov 15, 2024

Tair (Redis OSS互換) インスタンスは、オープンソースのRedisと完全に互換性があります。 Redisデータベースに接続するのと同じ方法でTairインスタンスに接続できます。 したがって、Redis準拠のクライアントを使用してTairインスタンスに接続できます。

前提条件

次の表に示す操作は、クライアントがデプロイされているホストのタイプに基づいて実行されます。

ホスト

API 操作

ECSインスタンス (推奨)

  1. Elastic Compute Service (ECS) インスタンスとTairインスタンスが同じ仮想プライベートクラウド (VPC) に属していることを確認してください。 これら2つのインスタンスのVPC IDが同じ場合、インスタンスは同じVPCに属します。

    説明
    • インスタンスが異なるVPCにデプロイされている場合、ECSインスタンスが属するVPCを変更できます。 詳細については、「ECSインスタンスのVPCの変更」をご参照ください。

    • ECSインスタンスとTairインスタンスのネットワークタイプは異なる場合があります。 たとえば、ECSインスタンスはクラシックネットワークに属し、TairインスタンスはVPCに属しているとします。 インスタンスが異なるタイプのネットワークにデプロイされている場合にECSインスタンスをTairインスタンスに接続する方法については、「異なるタイプのネットワークでECSインスタンスをApsaraDB For Redisインスタンスに接続する」をご参照ください。

  2. ECSインスタンスの内部IPアドレスを取得します。 詳細については、「ネットワークに関するFAQ」をご参照ください。

  3. ECSインスタンスの内部IPアドレスをTairインスタンスのホワイトリストに追加します。 詳細については、「ホワイトリストの設定」をご参照ください。

オンプレミスデバイスOn-premises device

  1. デフォルトでは、Tairインスタンスで使用できるのは内部エンドポイントのみです。 インターネット経由でTairインスタンスに接続する場合は、パブリックエンドポイントを申請する必要があります。 詳細については、「インスタンスのパブリックエンドポイントの申請」をご参照ください。

  2. オンプレミスデバイスのパブリックIPアドレスを取得する方法は、ネットワーク環境や運用によって異なる場合があります。 次の一覧では、さまざまなオペレーティングシステムのコマンドを使用して、オンプレミスのデバイスのパブリックIPアドレスを取得するための参照方法を示します。

    • Linux: CLIを開き、curl ifconfig.meコマンドを入力し、enterキーを押します。

    • Windows: コマンドプロンプトを開き、curl ip.meコマンドを入力して、enterキーを押します。

    • macOS: ターミナルを起動し、curl ifconfig.meコマンドを入力してから、enterキーを押します。

  3. オンプレミスのデバイスのパブリックIPアドレスをTairインスタンスのホワイトリストに追加します。 詳細については、「ホワイトリストの設定」をご参照ください。

使用上の注意

  • デフォルトでは、クラスターおよび読み書き分離インスタンスはプロキシモードで実行されます。 このモードでは、標準インスタンスに接続するのと同じ方法で、インスタンス内のプロキシノードのエンドポイントを使用してこのようなインスタンスに接続できます。 クラスターおよび読み書き分離インスタンスの詳細については、「クラスターマスターレプリカインスタンス」および「読み書き分離インスタンス」をご参照ください。

    説明

    プライベートエンドポイントを使用してクラスターインスタンスに接続する場合、オープンソースのRedisクラスターに接続するのと同じ方法でインスタンスに接続できます。 プライベートエンドポイントの詳細については、「直接接続モードの有効化」をご参照ください。

  • VPCにデプロイされたTairインスタンスに対してパスワードなしのアクセスが有効になっている場合、インスタンスと同じVPCにあるクライアントは、パスワードを使用せずにインスタンスに接続できます。 詳細については、「パスワード不要アクセスの有効化」をご参照ください。

接続情報の取得

クライアントを使用してTairまたはRedis Open-Source Editionインスタンスに接続する場合、次の表に示す接続情報を取得し、コードでその情報を指定する必要があります。

項目

説明

インスタンスエンドポイント

Tairインスタンスは複数のエンドポイントタイプをサポートします。 セキュリティを高め、ネットワーク遅延を減らすために、VPCエンドポイントを使用することを推奨します。 詳細については、「エンドポイントの表示」をご参照ください。

ポート番号

デフォルトのポート番号6379を使用するか、カスタムポート番号を指定します。 詳細については、「インスタンスのエンドポイントまたはポート番号の変更」をご参照ください。

インスタンスアカウント (特定のクライアントではオプション)

デフォルトでは、Tairインスタンスには、インスタンスIDにちなんで名前が付けられたデータベースアカウントがあります。 例: r-bp10noxlhcoim2 **** 。 別のデータベースアカウントを作成し、そのアカウントに必要な権限を付与できます。 詳細については、「データベースアカウントの作成と管理」をご参照ください。

パスワード

パスワードの形式は、選択したアカウントによって異なります。

  • ユーザー名がインスタンスIDと同じデフォルトアカウントを使用する場合は、パスワードを入力します。

  • カスタムアカウントを使用する場合は、<user >:< password> 形式でパスワードを入力します。 たとえば、カスタムアカウントのユーザー名がtestaccountで、パスワードがRp829dlwaの場合、パスワードとしてtestaccount:Rp829dlwaを入力します。

説明
  • Remote Desktop Manager (RDM) などのサードパーティのデータベース管理ツールを使用してTairインスタンスに接続する場合は、user:password形式でパスワードを入力します。

  • パスワードを忘れた場合は、リセットできます。 詳細については、「パスワードの変更またはリセット」をご参照ください。

クライアントの一般的なタイプ

TairおよびRedis Open-Source Editionでサポートされているクライアントの一覧については、「Redisクライアント」をご参照ください。

重要

このセクションでは、共通クライアントを使用してTairに接続する方法のサンプルコードのみを示します。

ジェディス

次のサンプルプロジェクトは、Mavenを使用して作成されます。 Jedisクライアントを手動でダウンロードすることもできます。

  1. コンパイラを開き、プロジェクトを作成します。

  2. 次の依存関係をpomファイルに追加します。

    この例では、Jedis 4.3.0が使用されます。

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>4.3.0</version>
    </dependency>
  3. エディターに次のコードを入力し、コメントに基づいてコードを変更します。

    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();
            // Specify the maximum number of idle connections based on your business needs. This value cannot exceed the maximum number of connections supported by the Tair instance. 
            config.setMaxIdle(200);
            // Specify the maximum number of connections based on your business needs. This value cannot exceed the maximum number of connections supported by the Tair instance. 
            config.setMaxTotal(300);
            config.setTestOnBorrow(false);
            config.setTestOnReturn(false);
            // Replace the values of the host and password parameters with the endpoint of the Tair instance and the password of the instance account. 
            String host = "r-bp1s1bt2tlq3p1****pd.redis.rds.aliyuncs.com";
            String password = "r-bp1s1bt2tlq3p1****:Database123";
            JedisPool pool = new JedisPool(config, host, 6379, 3000, password);
            Jedis jedis = null;
            try {
                jedis = pool.getResource();
                // Refer to the following example to perform related operations: 
                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) {
                // Handle timeout errors or other exceptions. 
                e.printStackTrace();
            }
            finally {
                if (jedis != null) {
                    jedis.close();
                }
            }
            pool.destroy();    // If your application exits and you want to destroy the resources, call this method. Then, the connection is closed, and the resources are released. 
        }
    }
  4. 上記のコードを実行します。 次の出力は、正常に完了すると予想されます。

    bar
    [bike, car]
    重要

    特定のパラメータが不適切に構成されているか、一部の機能が不適切に使用されると、エラーが発生します。 エラーのトラブルシューティング方法の詳細については、「」をご参照ください。一般的なエラーとトラブルシューティング.

PhpRedis

  1. PhpRedisクライアントをダウンロードしてインストールします。

  2. PHPエディタに次のコードを入力し、コメントに基づいてコードを変更します。

    この例では、PHP 8.2.1とPhpRedis 5.3.7が使用されます。

    <?php
     /* Replace the values of the host and port parameters with the endpoint and port number of the instance.   */
     $host = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com";
     $port = 6379;
     /* Replace the values of the user and pwd parameters with the username and password of the instance account. */
     $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());
      }
      /* You can perform operations on the instance after the connection is established. The following code provides an example on how to call the set and get methods:   */
     if ($redis->set("foo", "bar") == false) {
             die($redis->getLastError());
     }
     $value = $redis->get("foo");
     echo $value;
     ?>
  3. 上記のコードを実行して、インスタンスに接続します。

    説明

    一般的なエラーと解決策:

redis-py

  1. redis-pyクライアントをダウンロードしてインストールします。

  2. Pythonエディターに次のコードを入力し、コメントに基づいてコードを変更します。

    この例では、Python 3.9とredis-py 4.4.1が使用されています。

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    import redis
    # Replace the values of the host and port parameters with the endpoint and port number of the instance. 
    host = 'r-bp10noxlhcoim2****.redis.rds.aliyuncs.com'
    port = 6379
    # Replace the value of the pwd parameter with the password of the instance account. 
    pwd = 'testaccount:Rp829dlwa'
    r = redis.Redis(host=host, port=port, password=pwd)
    # You can perform operations on the instance after the connection is established. The following code provides an example on how to call the set and get methods: 
    r.set('foo', 'bar')
    print(r.get('foo'))
  3. 上記のコードを実行して、インスタンスに接続します。

SpringデータRedis

次のサンプルプロジェクトは、Mavenを使用して作成されます。 LettuceまたはJedisクライアントを手動でダウンロードすることもできます。

  1. コンパイラを開き、プロジェクトを作成します。

  2. 次の依存関係をpomファイルに追加し、LettuceまたはJedisクライアントをダウンロードします。 6.3.0より前のレタスバージョンを使用しないことを推奨します。

    <?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. Spring Data Redisエディタに次のコードを入力し、コメントに基づいてコードを変更します。

    この例では、Spring Data Redis 2.4.2が使用されます。

    • JedisとSpring Data Redis

      @Bean
           JedisConnectionFactory redisConnectionFactory() {
               RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("host", port);
       
               JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
               // Specify the maximum number of connections based on your business needs. This value cannot exceed the maximum number of connections supported by the Tair instance. 
               jedisPoolConfig.setMaxTotal(30);
               // Specify the maximum number of idle connections based on your business needs. This value cannot exceed the maximum number of connections supported by the Tair instance. 
               jedisPoolConfig.setMaxIdle(20);
               // Disable testOn[Borrow|Return] to prevent additional PING commands from being generated. 
               jedisPoolConfig.setTestOnBorrow(false);
               jedisPoolConfig.setTestOnReturn(false);
       
               JedisClientConfiguration jedisClientConfiguration = JedisClientConfiguration.builder().usePooling().poolConfig(
                   jedisPoolConfig).build();
       
               return new JedisConnectionFactory(config, jedisClientConfiguration);
           }
    • レタスと春のデータRedis

      @Configuration
      public class BeanConfig {
          /**
           * Enable TCP keepalive and configure the following three parameters:
           *  TCP_KEEPIDLE = 30
           *  TCP_KEEPINTVL = 10
           *  TCP_KEEPCNT = 3
           */
          private static final int TCP_KEEPALIVE_IDLE = 30;
      
          /**
           * The TCP_USER_TIMEOUT parameter can avoid situations where Lettuce remains stuck in a continuous timeout loop during a failure or crash event. 
           * 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");
      
              // Config 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. 上記のコードを実行してTairインスタンスに接続します。

CまたはC ++ クライアント

  1. hiredisをダウンロードしてインストールします。

  2. CまたはC ++ エディタに次のコードを入力し、コメントに基づいてコードを変更します。

    この例では、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 seconds
        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 a key */
        reply = redisCommand(c,"SET %s %s", "foo", "hello world");
        printf("SET: %s\n", reply->str);
        freeReplyObject(reply);
        /* Set a key using binary safe API */
        reply = redisCommand(c,"SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5);
        printf("SET (binary API): %s\n", reply->str);
        freeReplyObject(reply);
        /* Try a GET and two 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);
        /* again ... */
        reply = redisCommand(c,"INCR counter");
        printf("INCR counter: %lld\n", reply->integer);
        freeReplyObject(reply);
        /* Create a list of numbers, from 0 to 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);
            }
        /* Let's check what we have inside the list */
        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);
        /* Disconnects and frees the context */
        redisFree(c);
        return 0;
    }
  3. コードをコンパイルします。

    gcc -o example -g example.c -I /usr/local/include/hiredis -lhiredis
  4. テスト実行を実行し、インスタンスに接続します。

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

. NET

  1. StackExchange.Redis 2.7.20以降をダウンロードしてインストールします。 詳細については、「StackExchange.Redisの更新に関するお知らせ」をご参照ください。

    重要

    ServiceStack RedisまたはCSRedisクライアントを使用しないことを推奨します。

    • ServiceStack Redisを使用し、クライアントに関連する問題が発生した場合は、ServiceStackからテクニカルサポートを購入する必要があります。

    • CSRedisクライアントのサポートは終了しました。

  2. StackExchange.Redisエディタで次のコードを入力し、コメントに基づいてコードを変更します。

    この例では、StackExchange.Redis 2.7.20が使用されています。

    using StackExchange.Redis;
     // Specify the endpoint, port number, and password of the instance. 
     private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379,password=testaccount:Rp829dlwa,connectTimeout=2000");
      //the lock for 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;
     }
    説明
    • ConfigurationOptionsは、StackExchange.Redisクライアントのコアオブジェクトです。 ConfigurationOptionsは、クライアントによって共有および再利用されます。 シングルトンパターンをお勧めします。 パラメーター設定の詳細については、「設定オプション」をご参照ください。

    • GetDatabase() は軽量オブジェクトを返します。 このオブジェクトは、ConnectionMultiplexerオブジェクトから取得できます。

       redisConn = getRedisConn();
       var db = redisConn.GetDatabase();
  3. クライアントを使用して、共通のデータ構造に対する操作を実行します。 例:

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

    ハッシュ

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

    ソートセット

    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. node-redisクライアントをダウンロードしてインストールします。

  2. node-redisクライアントに次のコードを入力し、コメントに基づいてコードを変更します。

    この例では、Node.js 19.4.0とnode-redis 4.5.1が使用されています。

    import { createClient } from 'redis';
    
    // Specify the port number, endpoint, username, and password of the instance.
    const client = createClient({
      // redis[s]://[[username][:password]@][host][:port][/db-number]
      url: 'redis://testaccount:Rp829dlwa@r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379'
    });
    
    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();
    説明

    SyntaxError: モジュールの外部でimportステートメントを使用できませんエラーメッセージが返されます。のサフィックスを変更します。. jsファイルを. mjsを追加し、-- 実験モジュールこのクライアントを使用する場合は、 例: node -- experimental-modules redis.mjs

  3. 上記のコードを実行して、インスタンスに接続します。

go-redis

  1. go-redisクライアントをダウンロードしてインストールします。

  2. go-redisクライアントに次のコードを入力し、コメントに基づいてコードを変更します。

    この例では、Go 1.18.5とgo-redis 8.11.5が使用されます。

    package main
    
    import (
    	"github.com/go-redis/redis"
    	"fmt"
    )
    
    func ExampleClient() {
    	client := redis.NewClient(&redis.Options{
            // Specify the endpoint and port number of the instance.
    		Addr:     "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379",
            // Specify the password of the instance account.
    		Password: "testaccount:Rp829dlwa",
    		DB:       0,  // use default DB
    	})
        // The following code provides an example on how to call the set and get methods: 
    	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. 上記のコードを実行して、インスタンスに接続します。

レタス

次のサンプルプロジェクトは、Mavenを使用して作成されます。 Lettuceクライアントを手動でダウンロードすることもできます。

  1. コンパイラを開き、プロジェクトを作成します。

  2. 次の依存関係をpomファイルに追加し、Lettuce 6.3.0をダウンロードします。 6.3.0より前のレタスバージョンを使用しないことを推奨します。

    この例では、レタス6.3.0が使用されます。

    <<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. エディターに次のコードを入力し、コメントに基づいてコードを変更します。

    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 {
        /**
         * Enable TCP keepalive and configure the following three parameters:
         *  TCP_KEEPIDLE = 30
         *  TCP_KEEPINTVL = 10
         *  TCP_KEEPCNT = 3
         */
        private static final int TCP_KEEPALIVE_IDLE = 30;
    
        /**
         * The TCP_USER_TIMEOUT parameter can avoid situations where Lettuce remains stuck in a continuous timeout loop during a failure or crash event. 
         * 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) {
            // Replace the values of host, user, password, and port with the actual instance information. 
            String host = "r-bp1s1bt2tlq3p1****.redis.rds.aliyuncs.com";
            String user = "r-bp1s1bt2tlq3p1****";
            String password = "Da****3";
            int port = 6379;
    
            // Config RedisURL
            RedisURI uri = RedisURI.Builder
                    .redis(host, port)
                    .withAuthentication(user, password)
                    .build();
    
            // Config 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"));
    
            // If your application exits and you want to destroy the resources, call this method. Then, the connection is closed, and the resources are released. 
            connection.close();
            client.shutdown();
        }
    }
  4. 上記のコードを実行します。 次の出力は、正常に完了すると予想されます。

    OK
    bar