-
Notifications
You must be signed in to change notification settings - Fork 10
/
RedisConfiguration.java
43 lines (32 loc) · 1.51 KB
/
RedisConfiguration.java
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
package com.behl.overseer.configuration;
import java.util.Optional;
import java.util.UUID;
import javax.cache.CacheManager;
import javax.cache.Caching;
import org.redisson.config.Config;
import org.redisson.jcache.configuration.RedissonConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.github.bucket4j.distributed.proxy.ProxyManager;
import io.github.bucket4j.grid.jcache.JCacheProxyManager;
@Configuration
public class RedisConfiguration {
private static final String CACHE_NAME = "rate-limit";
@Bean(name = "rate-limit-cache-manager")
public CacheManager cacheManager(final RedisProperties redisProperties) {
final var cacheManager = Caching.getCachingProvider().getCacheManager();
final var isCacheCreated = Optional.ofNullable(cacheManager.getCache(CACHE_NAME)).isPresent();
if (Boolean.FALSE.equals(isCacheCreated)) {
final var connectionUrl = String.format("redis://%s:%d", redisProperties.getHost(), redisProperties.getPort());
final var configuration = new Config();
configuration.useSingleServer().setPassword(redisProperties.getPassword()).setAddress(connectionUrl);
cacheManager.createCache(CACHE_NAME, RedissonConfiguration.fromConfig(configuration));
}
return cacheManager;
}
@Bean
ProxyManager<UUID> proxyManager(final CacheManager cacheManager) {
return new JCacheProxyManager<UUID>(cacheManager.getCache(CACHE_NAME));
}
}