in jetcache-starter/jetcache-autoconfigure/src/main/java/com/alicp/jetcache/autoconfigure/RedisLettuceAutoConfiguration.java [61:119]
protected CacheBuilder initCache(ConfigTree ct, String cacheAreaWithPrefix) {
Map<String, Object> map = ct.subTree("uri"/*there is no dot*/).getProperties();
String readFromStr = ct.getProperty("readFrom");
String mode = ct.getProperty("mode");
long asyncResultTimeoutInMillis = ct.getProperty("asyncResultTimeoutInMillis", CacheConsts.ASYNC_RESULT_TIMEOUT.toMillis());
boolean enablePubSub = parseBroadcastChannel(ct) != null;
ReadFrom readFrom = null;
if (readFromStr != null) {
readFrom = ReadFrom.valueOf(readFromStr.trim());
}
AbstractRedisClient client;
StatefulConnection<byte[], byte[]> connection;
StatefulRedisPubSubConnection<byte[], byte[]> pubSubConnection = null;
if (map == null || map.size() == 0) {
throw new CacheConfigException("lettuce uri is required");
} else {
List<RedisURI> uriList = map.values().stream().map((k) -> RedisURI.create(URI.create(k.toString())))
.collect(Collectors.toList());
if ("Cluster".equalsIgnoreCase(mode)) {
client = RedisClusterClient.create(uriList);
connection = clusterConnection(ct, readFrom, (RedisClusterClient) client, false);
if (enablePubSub) {
pubSubConnection = (StatefulRedisPubSubConnection) clusterConnection(ct, readFrom, (RedisClusterClient) client, true);
}
} else {
client = RedisClient.create();
((RedisClient) client).setOptions(ClientOptions.builder().
disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS).build());
StatefulRedisMasterReplicaConnection c = MasterReplica.connect(
(RedisClient) client, new JetCacheCodec(), uriList);
if (readFrom != null) {
c.setReadFrom(readFrom);
}
connection = c;
if (enablePubSub) {
pubSubConnection = ((RedisClient) client).connectPubSub(new JetCacheCodec(), uriList.get(0));
}
}
}
ExternalCacheBuilder externalCacheBuilder = RedisLettuceCacheBuilder.createRedisLettuceCacheBuilder()
.connection(connection)
.pubSubConnection(pubSubConnection)
.redisClient(client)
.asyncResultTimeoutInMillis(asyncResultTimeoutInMillis);
parseGeneralConfig(externalCacheBuilder, ct);
// eg: "remote.default.client"
autoConfigureBeans.getCustomContainer().put(cacheAreaWithPrefix + ".client", client);
LettuceConnectionManager m = LettuceConnectionManager.defaultManager();
m.init(client, connection);
autoConfigureBeans.getCustomContainer().put(cacheAreaWithPrefix + ".connection", m.connection(client));
autoConfigureBeans.getCustomContainer().put(cacheAreaWithPrefix + ".commands", m.commands(client));
autoConfigureBeans.getCustomContainer().put(cacheAreaWithPrefix + ".asyncCommands", m.asyncCommands(client));
autoConfigureBeans.getCustomContainer().put(cacheAreaWithPrefix + ".reactiveCommands", m.reactiveCommands(client));
return externalCacheBuilder;
}