RedisConfig.java
4.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.infoloop.tianting.config;
import brave.Tracing;
import com.infoloop.tianting.tracing.RedisSpanCustomizer;
import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.resource.ClientResources;
import io.lettuce.core.tracing.BraveTracing;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import static com.infoloop.tianting.constant.ConfigConstants.ENTERPRISE_REDIS_CLIENT;
import static com.infoloop.tianting.constant.ConfigConstants.ENTERPRISE_REDIS_CONNECTION;
import static com.infoloop.tianting.constant.ConfigConstants.ENTERPRISE_REDIS_DATABASE;
import static com.infoloop.tianting.constant.ConfigConstants.ENTERPRISE_REDIS_PASSWORD;
import static com.infoloop.tianting.constant.ConfigConstants.ENTERPRISE_REDIS_URL;
import static com.infoloop.tianting.constant.ConfigConstants.REDISSON_CLIENT;
import static com.infoloop.tianting.constant.ConfigConstants.REDIS_CLIENT;
import static com.infoloop.tianting.constant.ConfigConstants.REDIS_CONNECTION;
import static com.infoloop.tianting.constant.ConfigConstants.REDIS_DATABASE;
import static com.infoloop.tianting.constant.ConfigConstants.REDIS_PASSWORD;
import static com.infoloop.tianting.constant.ConfigConstants.REDIS_PORT;
import static com.infoloop.tianting.constant.ConfigConstants.REDIS_URL;
@Configuration
public class RedisConfig {
@Bean
public ClientResources clientResources(@Autowired Tracing tracing) {
final var redisTracing = BraveTracing.builder()
.excludeCommandArgsFromSpanTags()
.tracing(tracing)
.spanCustomizer(new RedisSpanCustomizer())
.build();
return ClientResources.builder().tracing(redisTracing).build();
}
@Bean(REDIS_CLIENT)
public RedisClient redisClient(@Value(REDIS_URL) final String url,
@Value(REDIS_PASSWORD) final String auth,
@Value(REDIS_DATABASE) final int dbToken,
@Autowired ClientResources clientResources) {
final var redisURIBuilder = RedisURI.builder()
.withHost(url)
.withTimeout(Duration.of(60, TimeUnit.SECONDS.toChronoUnit()))
.withDatabase(dbToken);
if (!auth.isEmpty()) {
redisURIBuilder.withPassword(auth.toCharArray());
}
final var redisURI = redisURIBuilder.build();
return RedisClient.create(clientResources, redisURI);
}
@Bean(REDISSON_CLIENT)
public RedissonClient redissonClient(@Value(REDIS_URL) final String url,
@Value(REDIS_PASSWORD) final String auth,
@Value(REDIS_PORT) final String port,
@Value(REDIS_DATABASE) final int dbToken) {
final var config = new Config();
config.setCodec(new JsonJacksonCodec());
config.useSingleServer()
.setAddress("redis://" + url + ":" + port)
.setDatabase(dbToken);
if (!auth.isEmpty()) {
config.useSingleServer().setPassword(auth);
}
return Redisson.create(config);
}
@Bean(REDIS_CONNECTION)
public StatefulRedisConnection<String, String> statefulRedisConnection(@Autowired @Qualifier(REDIS_CLIENT) RedisClient redisClient) {
return redisClient.connect();
}
@Bean(ENTERPRISE_REDIS_CLIENT)
public RedisClient enterpriseRedisClient(@Value(ENTERPRISE_REDIS_URL) final String url,
@Value(ENTERPRISE_REDIS_PASSWORD) final String auth,
@Value(ENTERPRISE_REDIS_DATABASE) final int dbToken,
@Autowired ClientResources clientResources) {
final var redisURIBuilder = RedisURI.builder()
.withHost(url)
.withTimeout(Duration.of(60, TimeUnit.SECONDS.toChronoUnit()))
.withDatabase(dbToken);
if (!auth.isEmpty()) {
redisURIBuilder.withPassword(auth.toCharArray());
}
final var redisURI = redisURIBuilder.build();
return RedisClient.create(clientResources, redisURI);
}
@Bean(ENTERPRISE_REDIS_CONNECTION)
public StatefulRedisConnection<String, String> enterpriseStatefulRedisConnection(@Autowired @Qualifier(ENTERPRISE_REDIS_CLIENT) RedisClient enterpriseRedisClient) {
return enterpriseRedisClient.connect();
}
}