Очистка memcache AppEngine не работает - PullRequest
1 голос
/ 20 декабря 2011

Я использую обработку сессии memcache в AppEngine. Иногда, выполняя релизы, я изменяю объекты таким образом, что содержимое memcache устаревает. Когда я делаю и я тестирую, я хочу иметь возможность очистить мой сеанс.

Я добавил сервлет для очистки 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 Ответ

1 голос
/ 10 января 2012

Чтобы обойти эту проблему, я обычно добавляю идентификатор версии к ключу объекта, хранящегося в memcache. Например, вместо:

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

Я делаю:

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

Позже, если я хочу аннулировать все данные в memcache, я просто изменяю номер версии (и записи, уже сохраненные в memcache, будут автоматически удалены по истечении срока их действия).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...