jetcache官方文档 - 使用lettuce客户端连接redis
statIntervalMinutes: 1 #统计间隔
areaInCacheName: false
local:
default: #默认area
type: caffeine
keyConvertor: fastjson
remote:
default:
type: redis.lettuce #使用lettuce
keyConvertor: fastjson
valueEncoder: java
valueDecoder: java
poolConfig:
minIdle: 1
maxIdle: 50
maxTotal: 1000
maxWait: 1000
# uri: ['redis://password@192.168.14.231:6379/0','redis://password@192.168.14.232:6379/0','redis://password@192.168.14.233:6379/0']
uri:
- redis://password@192.168.14.231:6379/0 #redis://密码@IP:端口/库
- redis://password@192.168.14.232:6379/0
- redis://password@192.168.14.233:6379/0
readFrom: masterPreferred #master优先
本来是想通过配置文件接入的,但是uri的格式密码和ip是通过@来分割的,但是我的redis集群密码本身就带一个@,会导致uri解析失败,然后用他对象配置的方式
@Bean
public RedisClient redisClient(){
RedisClient client = RedisClient.create("redis://127.0.0.1");
client.setOptions(ClientOptions.builder().
disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS)
.build());
return client;
}
但是官网上的配置只是单个redis,并不支持集群,网上也没找到redis集群应该怎么配置 因为jetcache是通过lettuce连接redis,再了解lettuce,再瞄了一眼jetcache的源码后,猜测将RedisClient替换为RedisClusterClient应该就可以实现
@Configuration
@EnableMethodCache(basePackages = "com.company.mypackage")
@EnableCreateCacheAnnotation
public class JetCacheConfig {
// @Bean
// public RedisClient redisClient(){
// RedisClient client = RedisClient.create("redis://127.0.0.1");
// client.setOptions(ClientOptions.builder().
// disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS)
// .build());
// return client;
// }
@Bean
public RedisClusterClient redisClient(){
ArrayList<RedisURI> list = new ArrayList<>();
RedisURI redisURI = new RedisURI();
redisURI.setHost("127.0.0.1");
redisURI.setPassword("XXXX@XXXX");
redisURI.setPort(1234);
list.add(redisURI);
RedisClusterClient client = RedisClusterClient.create(list);
client.setOptions(ClusterClientOptions.builder().
disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS)
.build());
return client;
}
@Bean
public SpringConfigProvider springConfigProvider() {
return new SpringConfigProvider();
}
@Bean
public GlobalCacheConfig config(SpringConfigProvider configProvider, RedisClusterClient redisClient){
Map localBuilders = new HashMap();
EmbeddedCacheBuilder localBuilder = LinkedHashMapCacheBuilder
.createLinkedHashMapCacheBuilder()
.keyConvertor(FastjsonKeyConvertor.INSTANCE);
localBuilders.put(CacheConsts.DEFAULT_AREA, localBuilder);
Map remoteBuilders = new HashMap();
RedisLettuceCacheBuilder remoteCacheBuilder = RedisLettuceCacheBuilder.createRedisLettuceCacheBuilder()
.keyConvertor(FastjsonKeyConvertor.INSTANCE)
.valueEncoder(JavaValueEncoder.INSTANCE)
.valueDecoder(JavaValueDecoder.INSTANCE)
.redisClient(redisClient);
remoteBuilders.put(CacheConsts.DEFAULT_AREA, remoteCacheBuilder);
GlobalCacheConfig globalCacheConfig = new GlobalCacheConfig();
//globalCacheConfig.setConfigProvider(configProvider);//for jetcache <=2.5
globalCacheConfig.setLocalCacheBuilders(localBuilders);
globalCacheConfig.setRemoteCacheBuilders(remoteBuilders);
globalCacheConfig.setStatIntervalMinutes(15);
globalCacheConfig.setAreaInCacheName(false);
return globalCacheConfig;
}
}
最后成功接入jetcache缓存,也不用将redis集群的密码改掉