清除memcache AppEngine无法正常工作

时间:2011-12-19 22:35:14

标签: java google-app-engine servlets memcached

我在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());

    }

在明确之前和之后进行会话转储,看起来没有任何不同。

我使用此权利吗?

干杯

1 个答案:

答案 0 :(得分:1)

为了解决这个问题,我通常会将一个版本ID附加到存储在memcache中的对象的键中。例如,而不是:

memcache.add('key', 'value')

我做:

version = '1'    
memcache.add(VERSION + '#key', 'value')

稍后,如果我想使memcache中的所有数据无效,我只需更改版本号(已存储在memcache中的条目将在到期时自动删除)。