tencent cloud

Tencent Cloud Distributed Cache (Redis OSS-Compatible)

Release Notes and Announcements
Release Notes
Announcements
User Tutorial
Product Introduction
Overview
Product Strengths
Use Cases
Storage Engine
Product Series
Product Versions
Specifications and Performance
Read/Write Separation
Multi-AZ Deployment
Regions and AZs
Terms
Service Regions and Service Providers
Purchase Guide
Billing Overview
Pricing Center
Instance Purchasing
Renewal (Yearly/Monthly Subscription)
Refund (Yearly/Monthly Subscription)
Overdue Payments
Switching from Pay-as-You-Go to Yearly/Monthly Subscription
Getting Started
Quickly Creating an Instance
Connecting to Redis Instance
Operation Guide
Operation Overview
Connecting to a Database Instance
Managing Instances
Upgrade Instance
Management Node (Redis/ValKey Edition)
Multi-AZ Deployment Management
Backup and Restoration
Managing Accounts
Parameter Configuration
Slow Query
Access Management
Network and Security
Monitoring and Alarms
Event Management (Redis/ValKey Edition)
Data Migration
Global Replication for Redis Edition
Database Audit
Performance Optimization
Sentinel Mode
Development Guidelines
Naming Rules
Basic Usage Guidelines
Design Principles of Key and Value
Command Usage Guidelines
Design Principles of Client Programs
Connection Pool Configuration
Command Reference
Command Reference Overview
Redis Edition and Valkey Edition Command Compatibility
Version Command Usage Differences
Differences Between the Proxy Architecture and Direct Connection Mode
More Command Operations (Redis/Valkey Edition)
Memcached Edition Command Compatibility
Practical Tutorial
Building TencentDB for Redis® Client Monitoring Based on Spring Boot
Redis Client Connection Configuration Policy and Practice
Global SCAN Guide for Cluster Architecture
Eliminating Instances Securely
Hot Key and Big Key
AZ Migration Scheme
Troubleshooting
Connection Exception
Exception Analysis and Solution of Redisson Client Timeout Reconnection
Performance Troubleshooting and Fine-Tuning
API Documentation
History
Introduction
API Category
Making API Requests
Instance APIs
Parameter Management APIs
Other APIs
Backup and Restoration APIs
Region APIs
Monitoring and Management APIs
Log APIs
Data Types
Error Codes
FAQs
General
Connection and Login
Purchase
Service Agreement
Service Level Agreement
Terms of Service
Glossary
Contact Us

Sample Code

PDF
フォーカスモード
フォントサイズ
最終更新日: 2026-03-17 18:23:48

Pom Configuration

<!-- Introduce the spring-data-redis component, which integrates the Lettuce dependency SDK by default. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</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>

Configuring Code

Note:
Configure the Lettuce connection pool with LIFO = false (namely, using FIFO queue mode). Otherwise, in a VIP cloud environment, differences in connection response times may cause load imbalances and connection pool failures.
1. By default, the Last-In-First-Out (LIFO) mode preferentially reuses the most recently returned connections, making some fast-responding connections "hot connections", while slow-responding connections remain idle for long periods, causing skewed actual load in the backend.
2. Connection pool failure: When a connection is temporarily abandoned due to slow response, the LIFO mechanism exacerbates the concentration of new requests assigned to a few active connections, amplifying single-point bottleneck risks.

import java.time.Duration;

import org.springframework.beans.factory.annotation.Value;
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.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;

import io.lettuce.core.ClientOptions;
import io.lettuce.core.SocketOptions;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;

@Configuration
public class lettuceSingleConfig {
// @Value("${tencent.redis.host}")
// private String redisHost;
//
// @Value("${tencent.redis.port:6379}")
// private Integer redisPort = 6379;
//
// @Value("${tencent.redis.database:0}")
// private Integer redisDatabase = 0;
//
// @Value("${tencent.redis.password:}")
// private String redisPassword;

@Value("${tencent.redis.connect.timeout:2000}")
private Integer redisConnectTimeout = 2000;

@Value("${tencent.redis.command.timeout:2000}")
private Integer redisCommandTimeout = 2000;
/**
* TCP_KEEPALIVE configuration parameters.
*/
@Value("${tencent.redis.tcp.keepalive.time.idle:30}")
private Integer redisTcpKeepaliveTimeIdle = 30;
@Value("${tencent.redis.tcp.keepalive.time.interval:10}")
private Integer redisTcpKeepaliveTimeInterval = 10;
@Value("${tencent.redis.tcp.keepalive.count:3}")
private Integer redisTcpKeepaliveCount = 3;

/**
* TCP_USER_TIMEOUT resolves the Lettuce long timeout issue.
*/
@Value("${tencent.redis.tcp.user.timeout:30}")
private Integer redisTcpUserTimeout = 30;

/**
* Pool-related parameters.
*/
@Value("${tencent.redis.pool.max-wait:1000}")
private Integer RedisPoolMaxwait = 1000;
@Value("${tencent.redis.pool.max-active:2000}")
private Integer RedisPoolMaxTotal = 2000;
@Value("${tencent.redis.pool.max-idle:1000}")
private Integer RedisPoolMaxIdle = 1000;
@Value("${tencent.redis.pool.min-idle:500}")
private Integer RedisPoolMinIdle = 500;

/**
* redisConnectionFactory and related parameters (Host, Port, Database, and Password) can be configured either here or in application.properties (choose one method).
*/
// @Bean
// public LettuceConnectionFactory redisConnectionFactory(LettuceClientConfiguration clientConfiguration) {
//
// RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration();
// standaloneConfiguration.setHostName(redisHost);
// standaloneConfiguration.setPort(redisPort);
// standaloneConfiguration.setDatabase(redisDatabase);
// standaloneConfiguration.setPassword(redisPassword);
//
// LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(standaloneConfiguration, clientConfiguration);
// connectionFactory.setDatabase(redisDatabase);
// return connectionFactory;
// }

@Bean
public LettuceClientConfiguration clientConfiguration() {


SocketOptions socketOptions = SocketOptions.builder()
.keepAlive(SocketOptions.KeepAliveOptions.builder()
// How long a connection remains idle before keepalive is started.
.idle(Duration.ofSeconds(redisTcpKeepaliveTimeIdle))
// Time interval between two keepalives.
.interval(Duration.ofSeconds(redisTcpKeepaliveTimeInterval))
// Number of keepalives before the connection is disabled.
.count(redisTcpKeepaliveCount)
// Whether to enable keepalive connection.
.enable()
.build())
.tcpUserTimeout(SocketOptions.TcpUserTimeoutOptions.builder()
// Resolve the long timeout issue caused by server rst.
.tcpUserTimeout(Duration.ofSeconds(redisTcpUserTimeout))
.enable()
.build())
// Set TCP connection timeout.
.connectTimeout(Duration.ofMillis(redisConnectTimeout))
.build();

ClientOptions clientOptions = ClientOptions.builder()
.autoReconnect(true)
.pingBeforeActivateConnection(true)
.cancelCommandsOnReconnectFailure(false)
.disconnectedBehavior(ClientOptions.DisconnectedBehavior.ACCEPT_COMMANDS)
.socketOptions(socketOptions)
.build();

// Create connection pool configuration and disable LIFO.
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setLifo(false); // Disable LIFO and enable FIFO.
poolConfig.setMaxTotal(RedisPoolMaxTotal); // Set maximum number of connections (optional).
poolConfig.setMaxIdle(RedisPoolMaxIdle); // Set maximum number of idle connections (optional).
poolConfig.setMinIdle(RedisPoolMinIdle); // Set minimum number of idle connections (optional).
poolConfig.setMaxWait(Duration.ofMillis(RedisPoolMaxwait));

return LettucePoolingClientConfiguration.builder()
.poolConfig(poolConfig)
.commandTimeout(Duration.ofMillis(redisCommandTimeout))
.clientOptions(clientOptions)
.build();
}
}

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック