use ExpiringMap for Pattern Cache

This commit is contained in:
Aikar
2017-08-24 22:45:12 -04:00
parent 34642136f5
commit 052a5d26dc
2 changed files with 19 additions and 1 deletions
+10
View File
@@ -46,6 +46,12 @@
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.jodah</groupId>
<artifactId>expiringmap</artifactId>
<version>0.5.8</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
@@ -70,6 +76,10 @@
<pattern>co.aikar.locales</pattern>
<shadedPattern>co.aikar.commands.locales</shadedPattern>
</relocation>
<relocation>
<pattern>net.jodah.expiringmap</pattern>
<shadedPattern>co.aikar.commands.lib.expiringmap</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>
@@ -24,8 +24,11 @@
package co.aikar.commands;
import com.google.common.collect.Maps;
import net.jodah.expiringmap.ExpirationPolicy;
import net.jodah.expiringmap.ExpiringMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
@SuppressWarnings("WeakerAccess")
@@ -51,7 +54,12 @@ final class ACFPatterns {
private ACFPatterns() {}
@SuppressWarnings("Convert2MethodRef")
static final Map<String, Pattern> patternCache = Maps.newHashMap();
static final Map<String, Pattern> patternCache = ExpiringMap.builder()
.maxSize(200)
.expiration(1, TimeUnit.HOURS)
.expirationPolicy(ExpirationPolicy.ACCESSED)
.build();
public static Pattern getPattern(String pattern) {
return patternCache.computeIfAbsent(pattern, s -> Pattern.compile(pattern));
}