Tair (Redis OSS互換) インスタンスは、オープンソースのRedisと完全に互換性があります。 Redisデータベースに接続するのと同じ方法でTairインスタンスに接続できます。 したがって、Redis準拠のクライアントを使用してTairインスタンスに接続できます。
前提条件
次の表に示す操作は、クライアントがデプロイされているホストのタイプに基づいて実行されます。
ホスト | API 操作 |
ECSインスタンス (推奨) |
|
オンプレミスデバイスOn-premises device |
|
使用上の注意
デフォルトでは、クラスターおよび読み書き分離インスタンスはプロキシモードで実行されます。 このモードでは、標準インスタンスに接続するのと同じ方法で、インスタンス内のプロキシノードのエンドポイントを使用してこのようなインスタンスに接続できます。 クラスターおよび読み書き分離インスタンスの詳細については、「クラスターマスターレプリカインスタンス」および「読み書き分離インスタンス」をご参照ください。
説明プライベートエンドポイントを使用してクラスターインスタンスに接続する場合、オープンソースのRedisクラスターに接続するのと同じ方法でインスタンスに接続できます。 プライベートエンドポイントの詳細については、「直接接続モードの有効化」をご参照ください。
VPCにデプロイされたTairインスタンスに対してパスワードなしのアクセスが有効になっている場合、インスタンスと同じVPCにあるクライアントは、パスワードを使用せずにインスタンスに接続できます。 詳細については、「パスワード不要アクセスの有効化」をご参照ください。
接続情報の取得
クライアントを使用してTairまたはRedis Open-Source Editionインスタンスに接続する場合、次の表に示す接続情報を取得し、コードでその情報を指定する必要があります。
項目 | 説明 |
インスタンスエンドポイント | Tairインスタンスは複数のエンドポイントタイプをサポートします。 セキュリティを高め、ネットワーク遅延を減らすために、VPCエンドポイントを使用することを推奨します。 詳細については、「エンドポイントの表示」をご参照ください。 |
ポート番号 | デフォルトのポート番号6379を使用するか、カスタムポート番号を指定します。 詳細については、「インスタンスのエンドポイントまたはポート番号の変更」をご参照ください。 |
インスタンスアカウント (特定のクライアントではオプション) | デフォルトでは、Tairインスタンスには、インスタンスIDにちなんで名前が付けられたデータベースアカウントがあります。 例: r-bp10noxlhcoim2 **** 。 別のデータベースアカウントを作成し、そのアカウントに必要な権限を付与できます。 詳細については、「データベースアカウントの作成と管理」をご参照ください。 |
パスワード | パスワードの形式は、選択したアカウントによって異なります。
説明
|
クライアントの一般的なタイプ
TairおよびRedis Open-Source Editionでサポートされているクライアントの一覧については、「Redisクライアント」をご参照ください。
このセクションでは、共通クライアントを使用してTairに接続する方法のサンプルコードのみを示します。
ジェディス
次のサンプルプロジェクトは、Mavenを使用して作成されます。 Jedisクライアントを手動でダウンロードすることもできます。
コンパイラを開き、プロジェクトを作成します。
次の依存関係を
pom
ファイルに追加します。この例では、Jedis 4.3.0が使用されます。
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>4.3.0</version> </dependency>
エディターに次のコードを入力し、コメントに基づいてコードを変更します。
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. } }
上記のコードを実行します。 次の出力は、正常に完了すると予想されます。
bar [bike, car]
重要特定のパラメータが不適切に構成されているか、一部の機能が不適切に使用されると、エラーが発生します。 エラーのトラブルシューティング方法の詳細については、「」をご参照ください。一般的なエラーとトラブルシューティング.
PhpRedis
PhpRedisクライアントをダウンロードしてインストールします。
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; ?>
上記のコードを実行して、インスタンスに接続します。
説明一般的なエラーと解決策:
要求されたアドレスを割り当てることができません
: エラーの原因と解決策については、「短期間の接続でApsaraDB For Redisにアクセスしたときに「要求されたアドレスを割り当てることができません」エラーが返された場合の対処方法」をご参照ください。redis protocol error, got 'as reply type byte
: PhpRedisクライアントのバージョンをアップグレードします。 詳細については、『GitHub』をご参照ください。
redis-py
redis-pyクライアントをダウンロードしてインストールします。
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'))
上記のコードを実行して、インスタンスに接続します。
SpringデータRedis
次のサンプルプロジェクトは、Mavenを使用して作成されます。 LettuceまたはJedisクライアントを手動でダウンロードすることもできます。
コンパイラを開き、プロジェクトを作成します。
次の依存関係を
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>
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; } }
上記のコードを実行してTairインスタンスに接続します。
CまたはC ++ クライアント
hiredisをダウンロードしてインストールします。
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; }
コードをコンパイルします。
gcc -o example -g example.c -I /usr/local/include/hiredis -lhiredis
テスト実行を実行し、インスタンスに接続します。
example r-bp10noxlhcoim2****.redis.rds.aliyuncs.com 6379 r-bp10noxlhcoim2**** password
. NET
StackExchange.Redis 2.7.20以降をダウンロードしてインストールします。 詳細については、「StackExchange.Redisの更新に関するお知らせ」をご参照ください。
重要ServiceStack RedisまたはCSRedisクライアントを使用しないことを推奨します。
ServiceStack Redisを使用し、クライアントに関連する問題が発生した場合は、ServiceStackからテクニカルサポートを購入する必要があります。
CSRedisクライアントのサポートは終了しました。
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();
クライアントを使用して、共通のデータ構造に対する操作を実行します。 例:
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
node-redisクライアントをダウンロードしてインストールします。
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
上記のコードを実行して、インスタンスに接続します。
go-redis
go-redisクライアントをダウンロードしてインストールします。
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() }
上記のコードを実行して、インスタンスに接続します。
レタス
次のサンプルプロジェクトは、Mavenを使用して作成されます。 Lettuceクライアントを手動でダウンロードすることもできます。
コンパイラを開き、プロジェクトを作成します。
次の依存関係を
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>
エディターに次のコードを入力し、コメントに基づいてコードを変更します。
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(); } }
上記のコードを実行します。 次の出力は、正常に完了すると予想されます。
OK bar