我在AppEngine中使用memcache会话处理。有时在进行发布时,我会以一种使memcache内容过时的方式更改对象。当我做和我测试时,我希望能够清除我的会话。
我添加了一个servlet来清除使用以下内容的memcache:
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());
}
在明确之前和之后进行会话转储,看起来没有任何不同。
我使用此权利吗?
干杯
答案 0 :(得分:1)
为了解决这个问题,我通常会将一个版本ID附加到存储在memcache中的对象的键中。例如,而不是:
memcache.add('key', 'value')
我做:
version = '1'
memcache.add(VERSION + '#key', 'value')
稍后,如果我想使memcache中的所有数据无效,我只需更改版本号(已存储在memcache中的条目将在到期时自动删除)。