Я использую jsr107 JCache в Google Apps Engine для сохранения данных сайта. Мой код выглядит так:
public static String read(String link, boolean UTF8) throws Exception {
URL url = new URL(link);
String cached = CacheLogic.instance().get(link);
if (!StringUtil.isEmpty(cached)) {
return cached;
}
// Here i save the website's context into data
CacheLogic.instance().put(link, data);
return data;
}
Мой CacheLogic:
public class CacheLogic {
private static CacheLogic singleton;
private Cache cache;
private final int TTL = 60;
public static CacheLogic instance() {
if (singleton == null) {
singleton = new CacheLogic();
}
return singleton;
}
private CacheLogic() {
Map<String, Integer> props = new HashMap<String, Integer>();
props.put(GCacheFactory.EXPIRATION_DELTA, TTL);
try {
CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory();
cache = cacheFactory.createCache(props);
} catch (CacheException e) {
e.printStackTrace();
}
}
public void put(String key, String value) {
cache.remove(key);
cache.put(key, value);
CacheStatistics stats = cache.getCacheStatistics();
System.out.println("[CacheLogic] New entry added. Count=" + stats.getObjectCount());
System.out.println("[CacheLogic] New entry added. size=" + cache.size());
}
public String get(String key) {
return (String) cache.get(key);
}
}
Я установил время истечения кеша на 60 секунд, и я вызываю read с аргументами вроде 'http://www.google.com/something' или' https://stackoverflow.com/something'.
Вот вещь.
Если call читает метод read с одними и теми же аргументами все время в течение 60 секунд, когда я впервые вызвал его, я всегда получаю кэшированные данные. Совершенная.
Однако, когда прошло более 60 секунд, я получаю нулевое значение. Я прочитал сайт и положил его в кеш. В следующий раз, когда я это укажу, я снова получаю ноль.
Похоже, что memcache никогда не сохраняет данные после истечения времени истечения, независимо от ключа.
Неправильно ли я использовал API?
ОБНОВЛЕНИЕ 1: я пробовал это только локально.