diff --git a/redisson/src/main/java/org/redisson/spring/cache/CacheConfig.java b/redisson/src/main/java/org/redisson/spring/cache/CacheConfig.java index e3a2c2d5d..4df3154ba 100644 --- a/redisson/src/main/java/org/redisson/spring/cache/CacheConfig.java +++ b/redisson/src/main/java/org/redisson/spring/cache/CacheConfig.java @@ -33,6 +33,8 @@ public class CacheConfig { private long ttl; private long maxIdleTime; + + private int maxSize; /** * Creates config object with @@ -72,6 +74,21 @@ public class CacheConfig { this.ttl = ttl; } + + public int getMaxSize() { + return maxSize; + } + + /** + * Set max size of map. Superfluous elements are evicted using LRU algorithm. + * + * @param maxSize - max size + * If 0 the cache is unbounded (default). + */ + public void setMaxSize(int maxSize) { + this.maxSize = maxSize; + } + public long getMaxIdleTime() { return maxIdleTime; } diff --git a/redisson/src/main/java/org/redisson/spring/cache/RedissonSpringCacheManager.java b/redisson/src/main/java/org/redisson/spring/cache/RedissonSpringCacheManager.java index 8d1ce777f..80aced5a0 100644 --- a/redisson/src/main/java/org/redisson/spring/cache/RedissonSpringCacheManager.java +++ b/redisson/src/main/java/org/redisson/spring/cache/RedissonSpringCacheManager.java @@ -216,7 +216,7 @@ public class RedissonSpringCacheManager implements CacheManager, ResourceLoaderA return createMap(name, config); } - if (config.getMaxIdleTime() == 0 && config.getTTL() == 0) { + if (config.getMaxIdleTime() == 0 && config.getTTL() == 0 && config.getMaxSize() == 0) { return createMap(name, config); } @@ -248,6 +248,8 @@ public class RedissonSpringCacheManager implements CacheManager, ResourceLoaderA Cache oldCache = instanceMap.putIfAbsent(name, cache); if (oldCache != null) { cache = oldCache; + } else { + map.setMaxSize(config.getMaxSize()); } return cache; }