Google App Engine - 经常被驱逐的Jcache

时间:2017-04-04 23:53:55

标签: java google-app-engine caching jcache

我已经使用JCache API设置了一个Memcache来与它进行交互。缓存构建如下:

import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheManager;

TreeMap<String, String> name2Id = Maps.newTreeMap();

...

if (cache == null) {
  @SuppressWarnings("rawtypes")
  Map properties = Collections.emptyMap();
  cache = CacheManager.getInstance().getCacheFactory().createCache(properties);
  CacheManager.getInstance().registerCache(dropDownCache, cache);
  log.fine("Registering cache: " + dropDownCache);
}
cache.put(innerCache, name2Id);

我的缓存注册了名称&#34; dropDownCache&#34;。缓存包含一个密钥,&#34; innerCache&#34;包含一个包含地图的值。地图包含一组键值,表示下拉菜单的索引内容。

我有一个cron作业/任务每分钟命中一次缓存,以确保缓存不被驱逐。根据文档,我不相信我应该这样做,因为我没有指定驱逐时间,因此密钥永远不会过期。但是,它确实告诉我,在很长一段时间内,缓存很少被驱逐。

问题在于,当我自己或其他用户使用下拉菜单实际访问webapp上的页面时。当页面出现时,下拉菜单最终从数据存储区加载,因为已注册的缓存不再存在。缓存最终经常丢失,我不明白为什么这与我在cron作业/任务中看到的形成鲜明对比。

将地图存储为密钥可能不合适?这似乎是合理的。

任何有助于弄清楚我的缓存被驱逐的原因都会有很大帮助。或者有没有办法弄清楚它被驱逐的确切原因?

0 个答案:

没有答案