Могу ли я использовать ConcurrentMap вместе со своим кешем? - PullRequest
1 голос
/ 01 ноября 2010

Многие люди называют ConcurrentMap кешем.

Это хорошая идея сделать это:

public List<Task> listTasks(final ProcessDefinition def, final boolean filterEnumerated) {
    final String CACHENAME = def.getName() + "-v" + def.getVersion() + "-Tasks";
    ConcurrentMap<String, List<Task>> cache = (ConcurrentMap<String, List<Task>>) Contexts.getApplicationContext().get(CACHENAME);
    if (Contexts.getApplicationContext().isSet(CACHENAME) && cache != null) {
        return cache.get(CACHENAME);
    } else {

        ConcurrentMap<String, List<Task>> myTasks = new MapMaker()
           .softValues()
           .expiration(2L, TimeUnit.HOURS)
           .makeComputingMap(
               new Function<String, List<Task>>() {
                @Override
                public List<Task> apply(String from) {
                    return getTasksFromDefinition(def, filterEnumerated);
                }
               });

        myTasks.put(CACHENAME, getTasksFromDefinition(def, filterEnumerated));

        Contexts.getApplicationContext().set(CACHENAME,myTasks);
        Collection<List<Task>> tz = myTasks.values();
        //First element in the collection
        return new ArrayList<Task>(tz.iterator().next());
    }
}

Или нет необходимости использовать ApplicationContext (который является Java)-ee контекст приложения) также кешировать карту, и просто получить значение с карты?Аналогично ответу на этот пост

Также я хотел бы знать, .expiration(2L, TimeUnit.HOURS).Это действительно 2 часа, или long принимает значения в миллисекундах?

1 Ответ

2 голосов
/ 01 ноября 2010

Лично я считаю, что нормально хранить такой кеш в ApplicationContext, так как он безопасен для потоков.Но имейте в виду размер кэша, особенно если вы кластеризуете и т. Д.

По вопросу об истечении срока действия, как вы и ожидали, срок действия составляет 2 часа.

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