我在AppEngine中使用内存缓存会话处理。有时在发布时,我会以使内存缓存内容过时的方式更改对象。当我进行测试时,我希望能够清除会话。
我已经添加了一个servlet来清除使用以下内容的内存缓存:
try {
CacheFactory cacheFactory = CacheManager.getInstance()
.getCacheFactory();
cacheFactory.createCache(Collections.emptyMap()).clear();
outputMessage(response, "CLEARED cache");
} catch (CacheException e1) {
LOG.log(Level.SEVERE, "cache issue", e1);
outputMessage(response, "cache issue!!!!!!!!");
}
我使用以下命令转储会话内容:
Enumeration<String> e = request.getSession().getAttributeNames();
outputMessage(response, "DUMPING SESSION..");
while (e.hasMoreElements()) {
String name = e.nextElement();
outputMessage(response, "Name:" + name + " value: "
+ request.getSession().getAttribute(name).toString());
}
在清除之前和之后进行会话转储看起来没有什么不同。
我使用这个权利吗?
干杯
最佳答案
为了解决这个问题,我通常将版本ID附加到存储在内存缓存中的对象的键中。例如,代替:
memcache.add('key', 'value')
我做:
version = '1'
memcache.add(VERSION + '#key', 'value')
以后,如果我想使内存缓存中的所有数据无效,则只需更改版本号(过期时已自动删除已存储在内存缓存中的条目)。