HaveAGuess
HaveAGuess

Reputation: 1241

Clearing memcache AppEngine not working

I use the memcache session handling in AppEngine. Sometimes when doing releases I change objects in a way that renders memcache contents obsolete. When I do and Im testing I want to be able to clear my session.

Ive added a servlet to clear memcache that uses:

        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!!!!!!!!");
        }

and I dump out the session contents using:

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

    }

Doing a dump of session before and after a clear doesnt look any different.

Am I using this right?

Cheers

Upvotes: 1

Views: 433

Answers (1)

Ricbit
Ricbit

Reputation: 839

To get around this problem, I usually append a version id to the key of the object stored in memcache. For example, instead of:

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

I do:

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

Later, if I want to invalidate all the data in memcache, I just change the version number (and the entries already stored in memcache will be automatically deleted when they expire).

Upvotes: 1

Related Questions