<!-- Jedis client (version 5.1.2 or later recommended) --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.2</version></dependency><!-- Lettuce client (version 6.3.0 or later recommended) --><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'
Instance ID:Password format, and custom accounts use the Username@Password format. Instances with password-free authentication do not require a password.SELECT command to switch databases, in which case only DB0 can be used. If your business depends on multiple DBs, switch to a client that supports the SELECT command.import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import redis.clients.jedis.Jedis;public class JedisProxyExample {public static void main(String[] args) {// Connection parametersString host = "192.xx.xx.2"; // Instance VIP addressint port = 6379; // Instance portString password = "crs-xxxx:password"; // Default account password format: Instance ID:Password// Connection pool configurationJedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(200); // Maximum number of connectionspoolConfig.setMaxIdle(200); // Maximum number of idle connectionspoolConfig.setMinIdle(50); // Minimum number of idle connectionspoolConfig.setMaxWaitMillis(3000); // Maximum wait time to obtain a connection (in milliseconds)poolConfig.setTestOnBorrow(false); // Do not test when obtaining a connectionpoolConfig.setTestOnReturn(false); // Do not test when returning a connectionpoolConfig.setTestWhileIdle(true); // Test connection validity when idlepoolConfig.setLifo(false); // Disable LIFO and use FIFO to avoid uneven load distribution// Create a connection poolJedisPool jedisPool = new JedisPool(poolConfig,host,port,2000, // Connection timeout (in milliseconds)2000, // Read timeout (in milliseconds)password);// Use a connection pool to perform operationstry (Jedis jedis = jedisPool.getResource()) {// Write data.jedis.set("name", "Distributed Cache");// Read data.String value = jedis.get("name");System.out.println("get name: " + value);// Set a Key with an expiration time.jedis.setex("session:user123", 3600, "session_data");// Hash operationsjedis.hset("user:1001", "name", "Zhang San");jedis.hset("user:1001", "age", "28");System.out.println("user name: " + jedis.hget("user:1001", "name"));// List operationsjedis.lpush("queue:tasks", "task1", "task2", "task3");String task = jedis.rpop("queue:tasks");System.out.println("dequeued task: " + task);}// Destroy the connection pool when the application shuts down.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"; // Custom account in proxy mode: the entire "username@password" string is passed as the password.JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setLifo(false);// Custom account in proxy mode: pass the entire "username@password" string as the password without setting the username separately.JedisPool jedisPool = new JedisPool(poolConfig,host,port,2000,2000,password // username@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:passwordtimeout: 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() {// Standalone configurationRedisStandaloneConfiguration standaloneConfig = new RedisStandaloneConfiguration();standaloneConfig.setHostName("192.xx.xx.2");standaloneConfig.setPort(6379);standaloneConfig.setPassword("crs-xxxx:password");// Connection pool configurationJedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setMaxWaitMillis(3000);poolConfig.setLifo(false); // FIFO mode// Client configurationJedisClientConfiguration 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) {// Build a RedisURIRedisURI redisUri = RedisURI.builder().withHost("192.xx.xx.2").withPort(6379).withPassword("crs-xxxx:password".toCharArray()).withTimeout(Duration.ofSeconds(2)).build();// Socket configuration (key parameters)SocketOptions socketOptions = SocketOptions.builder().connectTimeout(Duration.ofSeconds(2)) // Connection timeout.keepAlive(SocketOptions.KeepAliveOptions.builder().enable() // Enable TCP Keepalive.idle(Duration.ofSeconds(30)) // Start probing after 30 seconds of idle time.interval(Duration.ofSeconds(10)) // Probing interval: 10 seconds.count(3) // Number of probes: 3.build()).tcpUserTimeout(SocketOptions.TcpUserTimeoutOptions.builder().enable() // Enable tcpUserTimeout.tcpUserTimeout(Duration.ofSeconds(30)) // 30-second timeout.build()).build();// Create a RedisClientRedisClient redisClient = RedisClient.create();redisClient.setOptions(io.lettuce.core.ClientOptions.builder().socketOptions(socketOptions).build());// Connection pool configurationGenericObjectPoolConfig<StatefulRedisConnection<String, String>> poolConfig =new GenericObjectPoolConfig<>();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setMaxWaitMillis(3000);poolConfig.setLifo(false); // FIFO mode// Create a connection poolGenericObjectPool<StatefulRedisConnection<String, String>> pool =ConnectionPoolSupport.createGenericObjectPool(() -> redisClient.connect(redisUri),poolConfig);// Use a connection pool to perform operationstry (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", "Zhang San");sync.hset("user:1001", "age", "28");System.out.println("user name: " + sync.hget("user:1001", "name"));} catch (Exception e) {e.printStackTrace();}// Clean up resources when the application shuts down.pool.close();redisClient.shutdown();}}
spring:redis:host: 192.xx.xx.2port: 6379password: crs-xxxx:passwordtimeout: 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 configurationSocketOptions 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();// Connection pool configurationGenericObjectPoolConfig<?> poolConfig = new GenericObjectPoolConfig<>();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setMaxWaitMillis(3000);poolConfig.setLifo(false);// Lettuce client configurationLettucePoolingClientConfiguration lettuceConfig =LettucePoolingClientConfiguration.builder().commandTimeout(Duration.ofSeconds(2)).clientOptions(clientOptions).clientResources(clientResources).poolConfig(poolConfig).build();// Create a connection factory.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:password");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:password";// Load the CA certificate (JKS format).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);// Connection pool configurationJedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(200);poolConfig.setMaxIdle(200);poolConfig.setMinIdle(50);poolConfig.setLifo(false);// Create an SSL connection pool.JedisPool jedisPool = new JedisPool(poolConfig,host,port,2000,2000,password,true, // Enable SSL.sslContext.getSocketFactory(),null, // SSL parameternull // Hostname verifier);try (Jedis jedis = jedisPool.getResource()) {jedis.set("ssl_test", "encrypted");System.out.println(jedis.get("ssl_test"));}jedisPool.close();}}
Parameter | Description | Recommended Value |
maxTotal | Maximum Number of Connections | 200 |
maxIdle | Maximum number of idle connections. | 200 |
minIdle | Minimum number of free connections. | 50 |
maxWaitMillis | Maximum wait time for obtaining a connection (ms). | 3000 |
lifo | Connection acquisition policy | false (FIFO to prevent uneven load distribution) |
connectTimeout | Connection timeout (ms) | 2000 |
readTimeout | Read timeout (ms) | 2000 |
Parameter | Description | Recommended Value |
keepAlive.idle | Idle duration before probing starts | 30 seconds |
keepAlive.interval | Probing interval. | 10 seconds |
keepAlive.count | Number of Probings. | 3 times |
tcpUserTimeout | TCP user timeout | 30 seconds |
maxTotal and maxIdle are set appropriately.lifo is set to false (FIFO mode).minIdle is set appropriately to avoid the overhead of cold connection establishment.피드백