我在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')


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

09-26 11:11