<dependencies>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.10.5</version>
</dependency>
</dependencies>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.ehcache.org/v3"
xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd">
<cache alias="queryCache">
<resources>
<heap unit="entries">10000</heap>
</resources>
</cache>
</ehcache>
import org.ehcache.Cache;
import org.ehcache.CacheManager;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.CacheManagerBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.expiry.Duration;
import org.ehcache.expiry.Expirations;
import java.util.concurrent.TimeUnit;
public class QueryLibrary {
private static final CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build(true);
public static String executeQuery(String query) {
Cache<String, String> queryCache = cacheManager.createCache("queryCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, String.class,
ResourcePoolsBuilder.heap(10000)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(10, TimeUnit.SECONDS))));
String result = queryCache.get(query);
if (result == null) {
result = performQuery(query);
queryCache.put(query, result);
}
return result;
}
private static String performQuery(String query) {
// ...
}
}