Skip to content

Commit cd4ff3a

Browse files
committed
docs: add comprehensive connection pool configuration guide (#217)
- Add detailed Jedis pool configuration documentation - Include examples for property-based and Java-based configuration - Document JedisClientConfigurationBuilderCustomizer approach - Add pool monitoring examples and common configuration scenarios - Provide imports for all code examples to improve clarity
1 parent ea7a806 commit cd4ff3a

File tree

1 file changed

+204
-6
lines changed

1 file changed

+204
-6
lines changed

docs/content/modules/ROOT/pages/configuration.adoc

Lines changed: 204 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,15 @@ spring:
9090
ssl: false
9191
timeout: 60000 # Connection timeout in milliseconds
9292
93-
# Connection pool settings (optional)
94-
lettuce:
93+
# Jedis connection pool settings (Redis OM Spring uses Jedis by default)
94+
jedis:
9595
pool:
96-
max-active: 8
97-
max-idle: 8
98-
min-idle: 0
99-
max-wait: -1ms
96+
enabled: true
97+
max-active: 8 # Maximum connections in the pool
98+
max-idle: 8 # Maximum idle connections
99+
min-idle: 0 # Minimum idle connections
100+
max-wait: -1ms # Maximum wait time for connection (-1 = indefinite)
101+
time-between-eviction-runs: 30s # How often to evict idle connections
100102
----
101103

102104
=== Cluster Configuration
@@ -137,6 +139,202 @@ spring:
137139

138140
For more details on Redis Sentinel configuration, see the xref:sentinel.adoc[Redis Sentinel Support] page.
139141

142+
=== Connection Pool Configuration
143+
144+
Redis OM Spring uses Jedis as its Redis client, which provides robust connection pooling capabilities. The pool configuration can be customized through Spring Boot properties:
145+
146+
==== Basic Pool Configuration
147+
148+
[source,yaml]
149+
----
150+
spring:
151+
data:
152+
redis:
153+
jedis:
154+
pool:
155+
enabled: true # Enable connection pooling
156+
max-active: 8 # Maximum number of connections in the pool
157+
max-idle: 8 # Maximum number of idle connections
158+
min-idle: 0 # Minimum number of idle connections
159+
max-wait: -1ms # Maximum wait time for a connection (-1 = indefinite)
160+
161+
# Eviction configuration
162+
time-between-eviction-runs: 30s # How often to run the eviction thread
163+
min-evictable-idle-time: 60s # Minimum time before idle connections can be evicted
164+
num-tests-per-eviction-run: -1 # Number of connections to test per eviction run (-1 = test all)
165+
166+
# Connection validation
167+
test-on-borrow: false # Test connection before borrowing from pool
168+
test-on-return: false # Test connection when returning to pool
169+
test-while-idle: true # Test connections while idle
170+
----
171+
172+
==== Advanced Pool Configuration with Java Config
173+
174+
For more advanced configuration scenarios, you can create a custom `JedisConnectionFactory` bean:
175+
176+
[source,java]
177+
----
178+
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
179+
import org.springframework.context.annotation.Bean;
180+
import org.springframework.context.annotation.Configuration;
181+
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
182+
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
183+
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
184+
import redis.clients.jedis.JedisPoolConfig;
185+
import java.time.Duration;
186+
187+
@Configuration
188+
public class RedisPoolConfiguration {
189+
190+
@Bean
191+
public JedisConnectionFactory jedisConnectionFactory(RedisProperties redisProperties) {
192+
// Create pool configuration
193+
JedisPoolConfig poolConfig = new JedisPoolConfig();
194+
195+
// Connection pool size
196+
poolConfig.setMaxTotal(16); // Max total connections
197+
poolConfig.setMaxIdle(8); // Max idle connections
198+
poolConfig.setMinIdle(4); // Min idle connections
199+
poolConfig.setMaxWait(Duration.ofSeconds(5)); // Max wait time
200+
201+
// Eviction settings
202+
poolConfig.setTimeBetweenEvictionRuns(Duration.ofSeconds(30));
203+
poolConfig.setMinEvictableIdleTime(Duration.ofMinutes(1));
204+
poolConfig.setNumTestsPerEvictionRun(3);
205+
206+
// Connection validation
207+
poolConfig.setTestOnBorrow(true); // Validate before borrowing
208+
poolConfig.setTestOnReturn(false); // Don't validate on return
209+
poolConfig.setTestWhileIdle(true); // Validate idle connections
210+
poolConfig.setTestOnCreate(true); // Validate newly created connections
211+
212+
// LIFO behavior (Last In First Out)
213+
poolConfig.setLifo(true);
214+
215+
// Block when pool exhausted
216+
poolConfig.setBlockWhenExhausted(true);
217+
218+
// Build Jedis client configuration
219+
JedisClientConfiguration clientConfig = JedisClientConfiguration.builder()
220+
.connectTimeout(Duration.ofSeconds(2))
221+
.readTimeout(Duration.ofSeconds(2))
222+
.usePooling()
223+
.poolConfig(poolConfig)
224+
.build();
225+
226+
// Create connection factory
227+
RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
228+
redisConfig.setHostName(redisProperties.getHost());
229+
redisConfig.setPort(redisProperties.getPort());
230+
redisConfig.setPassword(redisProperties.getPassword());
231+
232+
return new JedisConnectionFactory(redisConfig, clientConfig);
233+
}
234+
}
235+
----
236+
237+
==== Using JedisClientConfigurationBuilderCustomizer
238+
239+
Spring Boot provides a customizer interface for fine-tuning the Jedis client configuration:
240+
241+
[source,java]
242+
----
243+
import org.springframework.boot.autoconfigure.data.redis.JedisClientConfigurationBuilderCustomizer;
244+
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
245+
import org.springframework.stereotype.Component;
246+
import redis.clients.jedis.JedisPoolConfig;
247+
import java.time.Duration;
248+
249+
@Component
250+
public class JedisPoolCustomizer implements JedisClientConfigurationBuilderCustomizer {
251+
252+
@Override
253+
public void customize(JedisClientConfiguration.JedisClientConfigurationBuilder clientConfigurationBuilder) {
254+
// Create custom pool configuration
255+
JedisPoolConfig poolConfig = new JedisPoolConfig();
256+
poolConfig.setMaxTotal(20);
257+
poolConfig.setMaxIdle(10);
258+
poolConfig.setMinIdle(5);
259+
poolConfig.setMaxWait(Duration.ofSeconds(3));
260+
poolConfig.setTestOnBorrow(true);
261+
262+
// Apply the custom pool configuration
263+
clientConfigurationBuilder.usePooling().poolConfig(poolConfig);
264+
265+
// Set timeouts
266+
clientConfigurationBuilder
267+
.connectTimeout(Duration.ofSeconds(2))
268+
.readTimeout(Duration.ofSeconds(2));
269+
}
270+
}
271+
----
272+
273+
==== Pool Monitoring and Metrics
274+
275+
To monitor your connection pool usage, you can access pool statistics:
276+
277+
[source,java]
278+
----
279+
import org.springframework.beans.factory.annotation.Autowired;
280+
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
281+
import org.springframework.stereotype.Component;
282+
import redis.clients.jedis.Jedis;
283+
import redis.clients.jedis.util.Pool;
284+
import org.slf4j.Logger;
285+
import org.slf4j.LoggerFactory;
286+
287+
@Component
288+
public class PoolMonitor {
289+
290+
private static final Logger logger = LoggerFactory.getLogger(PoolMonitor.class);
291+
292+
@Autowired
293+
private JedisConnectionFactory connectionFactory;
294+
295+
public void logPoolStats() {
296+
Pool<Jedis> pool = connectionFactory.getPool();
297+
if (pool != null) {
298+
logger.info("Active connections: {}", pool.getNumActive());
299+
logger.info("Idle connections: {}", pool.getNumIdle());
300+
logger.info("Waiting threads: {}", pool.getNumWaiters());
301+
}
302+
}
303+
}
304+
----
305+
306+
==== Common Pool Configuration Scenarios
307+
308+
.High-traffic applications
309+
[source,yaml]
310+
----
311+
spring:
312+
data:
313+
redis:
314+
jedis:
315+
pool:
316+
max-active: 50 # Higher connection limit
317+
max-idle: 25 # Keep more idle connections
318+
min-idle: 10 # Maintain minimum pool size
319+
max-wait: 2000ms # Fail fast if pool exhausted
320+
test-on-borrow: true # Ensure connection validity
321+
----
322+
323+
.Resource-constrained environments
324+
[source,yaml]
325+
----
326+
spring:
327+
data:
328+
redis:
329+
jedis:
330+
pool:
331+
max-active: 5 # Limited connections
332+
max-idle: 2 # Minimal idle connections
333+
min-idle: 0 # No minimum required
334+
max-wait: 5000ms # Wait longer for connections
335+
time-between-eviction-runs: 60s # Less frequent eviction
336+
----
337+
140338
== Redis OM Spring Configuration Properties
141339

142340
Redis OM Spring adds specific configuration properties to customize its behavior.

0 commit comments

Comments
 (0)