<!-- Jedisクライアント(5.1.2以降のバージョンを推奨) --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.2</version></dependency><!-- Lettuceクライアント(6.3.0以降のバージョンを推奨) --><dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.3.0.RELEASE</version></dependency>
implementation 'redis.clients:jedis:5.1.2'implementation 'io.lettuce:lettuce-core:6.3.0.RELEASE'
インスタンスID:パスワード形式を使用し、カスタムアカウントはユーザー名@パスワード形式を使用します。パスワード不要の認証インスタンスはパスワードが不要です。SELECTコマンドを使用してデータベースを切り替えられない可能性があります。この場合、DB0のみ使用できます。業務がマルチDBに依存している場合は、SELECTコマンドをサポートするクライアントに変更してください。import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import redis.clients.jedis.Jedis;public class JedisProxyExample {public static void main(String[] args) {// 接続パラメータString host = "192.xx.xx.2"; // インスタンスVIPアドレスint port = 6379; // インスタンスポートString password = "crs-xxxx:パスワード"; // デフォルトアカウントのパスワード形式:インスタンスID:パスワード// 接続プール設定JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(200); // 最大接続数poolConfig.setMaxIdle(200); // 最大アイドル接続数poolConfig.setMinIdle(50); // 最小アイドル接続数poolConfig.setMaxWaitMillis(3000); // 接続取得の最大待機時間(ミリ秒)poolConfig.setTestOnBorrow(false); // 接続取得時にテストを行いません。poolConfig.setTestOnReturn(false); // 接続返却時にテストを行いません。poolConfig.setTestWhileIdle(true); // アイドル時に接続の有効性をテストします。poolConfig.setLifo(false); // LIFOを無効にし、FIFOを使用して負荷の偏りを回避します。// 接続プールを作成します。JedisPool jedisPool = new JedisPool(poolConfig,host,port,2000, // 接続タイムアウト(ミリ秒)2000, // 読み取りタイムアウト(ミリ秒)password);// 接続プールを使用して操作を実行します。try (Jedis jedis = jedisPool.getResource()) {// データを書き込みます。jedis.set("name", "Tencent Cloud分散キャッシュデータベース");// データを読み取ります。String value = jedis.get("name");System.out.println("get name: " + value);// 有効期限付きのKeyを設定します。jedis.setex("session:user123", 3600, "session_data");// ハッシュ操作jedis.hset("user:1001", "name", "張三");jedis.hset("user:1001", "age", "28");System.out.println("user name: " + jedis.hget("user:1001", "name"));// リスト操作jedis.lpush("queue:tasks", "task1", "task2", "task3");String task = jedis.rpop("queue:tasks");System.out.println("dequeued task: " + task);}// アプリケーション終了時に接続プールを破棄します。jedisPool.close();}}
import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import redis.clients.jedis.Jedis;public class JedisCustomAccountExample {public static void main(String[] args) {String host = "192.xx.xx.2";int port = 6379;String password = "myuser@MyPassword"; // プロキシモードのカスタムアカウント:ユーザー名@パスワード全体をパスワードとして渡します。JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setLifo(false);// プロキシモードのカスタムアカウント:「ユーザー名@パスワード」を全体パスワードとして渡し、ユーザー名は個別に設定しません。JedisPool jedisPool = new JedisPool(poolConfig,host,port,2000,2000,password // ユーザー名@パスワード);try (Jedis jedis = jedisPool.getResource()) {jedis.set("key", "value");System.out.println(jedis.get("key"));}jedisPool.close();}}
spring:redis:host: 192.xx.xx.2port: 6379password: crs-xxxx:パスワードtimeout: 2000msjedis:pool:max-active: 200max-idle: 200min-idle: 50max-wait: 3000ms
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.connection.RedisStandaloneConfiguration;import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;import redis.clients.jedis.JedisPoolConfig;import java.time.Duration;@Configurationpublic class RedisConfig {@Beanpublic JedisConnectionFactory jedisConnectionFactory() {// スタンドアロン設定RedisStandaloneConfiguration standaloneConfig = new RedisStandaloneConfiguration();standaloneConfig.setHostName("192.xx.xx.2");standaloneConfig.setPort(6379);standaloneConfig.setPassword("crs-xxxx:パスワード");// 接続プール設定JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setMaxWaitMillis(3000);poolConfig.setLifo(false); // FIFO モード// クライアント設定JedisClientConfiguration clientConfig = JedisClientConfiguration.builder().connectTimeout(Duration.ofMillis(2000)).readTimeout(Duration.ofMillis(2000)).usePooling().poolConfig(poolConfig).build();return new JedisConnectionFactory(standaloneConfig, clientConfig);}@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, String> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new StringRedisSerializer());return template;}}
import io.lettuce.core.RedisClient;import io.lettuce.core.RedisURI;import io.lettuce.core.SocketOptions;import io.lettuce.core.api.StatefulRedisConnection;import io.lettuce.core.api.sync.RedisCommands;import io.lettuce.core.support.ConnectionPoolSupport;import org.apache.commons.pool2.impl.GenericObjectPool;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import java.time.Duration;public class LettuceProxyExample {public static void main(String[] args) {// RedisURIを構築します。RedisURI redisUri = RedisURI.builder().withHost("192.xx.xx.2").withPort(6379).withPassword("crs-xxxx:パスワード".toCharArray()).withTimeout(Duration.ofSeconds(2)).build();// Socket設定(主要パラメータ)SocketOptions socketOptions = SocketOptions.builder().connectTimeout(Duration.ofSeconds(2)) // 接続タイムアウト.keepAlive(SocketOptions.KeepAliveOptions.builder().enable() // TCP Keepaliveを有効にします。.idle(Duration.ofSeconds(30)) // アイドル状態が30秒間続いた場合に検出を開始します。.interval(Duration.ofSeconds(10)) // 検出間隔10秒.count(3) // 検出回数3回.build()).tcpUserTimeout(SocketOptions.TcpUserTimeoutOptions.builder().enable() // tcpUserTimeoutを有効にします。.tcpUserTimeout(Duration.ofSeconds(30)) // 30秒でタイムアウト.build()).build();// RedisClientを作成します。RedisClient redisClient = RedisClient.create();redisClient.setOptions(io.lettuce.core.ClientOptions.builder().socketOptions(socketOptions).build());// 接続プール設定GenericObjectPoolConfig<StatefulRedisConnection<String, String>> poolConfig =new GenericObjectPoolConfig<>();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setMaxWaitMillis(3000);poolConfig.setLifo(false); // FIFO モード// 接続プールを作成します。GenericObjectPool<StatefulRedisConnection<String, String>> pool =ConnectionPoolSupport.createGenericObjectPool(() -> redisClient.connect(redisUri),poolConfig);// 接続プールを使用して操作を実行します。try (StatefulRedisConnection<String, String> connection = pool.borrowObject()) {RedisCommands<String, String> sync = connection.sync();sync.set("name", "Distributed Cache");String value = sync.get("name");System.out.println("get name: " + value);sync.hset("user:1001", "name", "張三");sync.hset("user:1001", "age", "28");System.out.println("user name: " + sync.hget("user:1001", "name"));} catch (Exception e) {e.printStackTrace();}// アプリケーション終了時にリソースをクリーンアップします。pool.close();redisClient.shutdown();}}
spring:redis:host: 192.xx.xx.2port: 6379password: crs-xxxx:パスワードtimeout: 2000mslettuce:pool:max-active: 200max-idle: 200min-idle: 50max-wait: 3000ms
import io.lettuce.core.ClientOptions;import io.lettuce.core.SocketOptions;import io.lettuce.core.resource.ClientResources;import io.lettuce.core.resource.DefaultClientResources;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import java.time.Duration;@Configurationpublic class LettuceRedisConfig {@Bean(destroyMethod = "shutdown")public ClientResources clientResources() {return DefaultClientResources.create();}@Beanpublic LettuceConnectionFactory lettuceConnectionFactory(ClientResources clientResources) {// Socket設定SocketOptions socketOptions = SocketOptions.builder().connectTimeout(Duration.ofSeconds(2)).keepAlive(SocketOptions.KeepAliveOptions.builder().enable().idle(Duration.ofSeconds(30)).interval(Duration.ofSeconds(10)).count(3).build()).tcpUserTimeout(SocketOptions.TcpUserTimeoutOptions.builder().enable().tcpUserTimeout(Duration.ofSeconds(30)).build()).build();ClientOptions clientOptions = ClientOptions.builder().socketOptions(socketOptions).build();// 接続プール設定GenericObjectPoolConfig<?> poolConfig = new GenericObjectPoolConfig<>();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setMaxWaitMillis(3000);poolConfig.setLifo(false);// Lettuceクライアント設定LettucePoolingClientConfiguration lettuceConfig =LettucePoolingClientConfiguration.builder().commandTimeout(Duration.ofSeconds(2)).clientOptions(clientOptions).clientResources(clientResources).poolConfig(poolConfig).build();// 接続ファクトリを作成します。org.springframework.data.redis.connection.RedisStandaloneConfiguration standaloneConfig =new org.springframework.data.redis.connection.RedisStandaloneConfiguration();standaloneConfig.setHostName("192.xx.xx.2");standaloneConfig.setPort(6379);standaloneConfig.setPassword("crs-xxxx:パスワード");return new LettuceConnectionFactory(standaloneConfig, lettuceConfig);}@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, String> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new StringRedisSerializer());return template;}}
import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import redis.clients.jedis.Jedis;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManagerFactory;import java.io.FileInputStream;import java.security.KeyStore;public class JedisSSLExample {public static void main(String[] args) throws Exception {String host = "192.xx.xx.2";int port = 6379;String password = "crs-xxxx:パスワード";// CA証明書(JKS形式)を読み込みます。KeyStore trustStore = KeyStore.getInstance("JKS");try (FileInputStream fis = new FileInputStream("/path/to/ca.jks")) {trustStore.load(fis, "password".toCharArray());}TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());tmf.init(trustStore);SSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(null, tmf.getTrustManagers(), null);// 接続プール設定JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setLifo(false);// SSL接続プールを作成します。JedisPool jedisPool = new JedisPool(poolConfig,host,port,2000,2000,password,true, // SSLを有効にします。sslContext.getSocketFactory(),null, // SSLパラメータnull // ホスト名検証ツール);try (Jedis jedis = jedisPool.getResource()) {jedis.set("ssl_test", "encrypted");System.out.println(jedis.get("ssl_test"));}jedisPool.close();}}
パラメータ | 説明 | 推奨値 |
maxTotal | 最大接続数 | 200 |
maxIdle | 最大アイドル接続数 | 200 |
minIdle | 最小アイドル接続数 | 50 |
maxWaitMillis | 接続取得の最大待機時間(ミリ秒) | 3000 |
lifo | 接続取得ポリシー | false(FIFO、負荷分散の不均一を回避) |
connectTimeout | 接続タイムアウト(ミリ秒) | 2000 |
readTimeout | 読み取りタイムアウト(ミリ秒) | 2000 |
パラメータ | 説明 | 推奨値 |
keepAlive.idle | アイドル状態がどれくらい続いたら検出を開始するか | 30秒 |
keepAlive.interval | 検出間隔 | 10秒 |
keepAlive.count | 検出回数 | 3回 |
tcpUserTimeout | TCPユーザータイムアウト | 30秒 |
maxTotalとmaxIdleが適切に設定されているかどうかを確認してください。lifoがfalse(FIFOモード)に設定されていることを確認してください。minIdleが適切に設定されていることを確認し、コールド接続確立のオーバーヘッドを回避してください。Apakah halaman ini membantu?
Anda juga dapat Menghubungi Penjualan atau Mengirimkan Tiket untuk meminta bantuan.
masukan