diff --git a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheBuildRecorder.java b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheBuildRecorder.java index 87657b1d4..874d5918b 100644 --- a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheBuildRecorder.java +++ b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheBuildRecorder.java @@ -67,8 +67,8 @@ public class RedissonCacheBuildRecorder { for (RedissonCacheInfo cacheInfo : cacheInfos) { if (LOGGER.isDebugEnabled()) { LOGGER.debugf( - "Building Redis cache [%s] with [expireAfterAccess=%s], [expireAfterWrite=%s]", - cacheInfo.name, cacheInfo.expireAfterAccess, cacheInfo.expireAfterWrite); + "Building Redis cache [%s] with [expireAfterAccess=%s], [expireAfterWrite=%s], [maxSize=%s]", + cacheInfo.name, cacheInfo.expireAfterAccess, cacheInfo.expireAfterWrite, cacheInfo.maxSize); } RedissonCacheImpl cache = new RedissonCacheImpl(cacheInfo); diff --git a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheImpl.java b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheImpl.java index 4012507eb..2633cb85b 100644 --- a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheImpl.java +++ b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheImpl.java @@ -51,14 +51,22 @@ public class RedissonCacheImpl extends AbstractCache implements RedissonCache { CacheImplementation impl = cacheInfo.implementation.orElse(CacheImplementation.STANDARD); this.cacheInfo = cacheInfo; if (cacheInfo.expireAfterAccess.isPresent() - || cacheInfo.expireAfterWrite.isPresent()) { + || cacheInfo.expireAfterWrite.isPresent() + || cacheInfo.maxSize.isPresent()) { if (impl == CacheImplementation.STANDARD) { this.mapCache = redisson.getMapCache(cacheInfo.name); this.map = this.mapCache; + + if (cacheInfo.maxSize.isPresent()) { + mapCache.setMaxSizeAsync(cacheInfo.maxSize.orElse(0)); + } } else if (impl == CacheImplementation.NATIVE) { if (cacheInfo.expireAfterAccess.isPresent()) { throw new IllegalArgumentException("expireAfterAccess isn't supported by NATIVE implementation"); } + if (cacheInfo.maxSize.isPresent()) { + throw new IllegalArgumentException("maxSize isn't supported by NATIVE implementation"); + } this.mapCacheNative = redisson.getMapCacheNative(cacheInfo.name); this.map = this.mapCacheNative; } else { diff --git a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheInfo.java b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheInfo.java index 39123535c..5a369ba31 100644 --- a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheInfo.java +++ b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheInfo.java @@ -25,6 +25,12 @@ import java.util.Optional; */ public class RedissonCacheInfo { + /** + * The maximum size of this cache. + * Superfluous elements are evicted using LRU algorithm. + */ + public Optional maxSize = Optional.empty(); + /** * The cache name */ diff --git a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheInfoBuilder.java b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheInfoBuilder.java index 90a6de6aa..95a8e7c2e 100644 --- a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheInfoBuilder.java +++ b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheInfoBuilder.java @@ -61,6 +61,12 @@ public class RedissonCacheInfoBuilder { cacheInfo.expireAfterWrite = defaultRuntimeConfig.expireAfterWrite; } + if (namedRuntimeConfig != null && namedRuntimeConfig.maxSize.isPresent()) { + cacheInfo.maxSize = namedRuntimeConfig.maxSize; + } else if (defaultRuntimeConfig.maxSize.isPresent()) { + cacheInfo.maxSize = defaultRuntimeConfig.maxSize; + } + result.add(cacheInfo); } return result; diff --git a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheRuntimeConfig.java b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheRuntimeConfig.java index cd95ac9f6..0a1f9b293 100644 --- a/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheRuntimeConfig.java +++ b/redisson-quarkus/redisson-quarkus-30/cache/runtime/src/main/java/io/quarkus/cache/redisson/runtime/RedissonCacheRuntimeConfig.java @@ -29,6 +29,14 @@ import java.util.Optional; @ConfigGroup public class RedissonCacheRuntimeConfig { + /** + * Specifies maximum size of this cache. + * Superfluous elements are evicted using LRU algorithm. + * If 0 the cache is unbounded (default). + */ + @ConfigItem + Optional maxSize; + /** * Specifies that each entry should be automatically removed from the cache once a fixed duration has elapsed after * the entry's creation, or the most recent replacement of its value.