Проблема с кэшированием для ваших кеш-гуру.
Context
Мы использовали OsCache в OpenSymphony в течение нескольких лет и рассматриваем возможность перехода к более качественному, более мощному, быстрому и активно развивающемуся продукту кэширования.
Задача
Мы использовали функцию OsCache для «групповой записи» и не нашли ее где-либо еще.
Короче говоря, OsCache позволяет вам указать одну или несколько групп на входе
время вставки ». Позже вы можете сделать недействительной «группу записей», не зная ключей для каждой записи.
Пример OsCache
Вот пример кода с использованием этого механизма:
Object[] groups = {"mammal", "Northern Hemisphere", "cloven-feet"}
myCache.put(myKey, myValue , groups );
// later you can flush all 'mammal' entries
myCache.flushGroup("mammal")
// or flush all 'cloven-foot'
myCache.flushGroup("cloven-foot")
Альтернатива: механизм согласования
Мы используем другой самодельный кэш, написанный бывшим членом команды, который использует шаблон 'key matcher' для аннулирования записей
При таком подходе вы определяете свой класс 'key' and matcher 'следующим образом:
public class AnimalKey
{
String fRegion;
String fPhylum;
String fFootType;
..getters and setters go here
}
Сличитель:
public class RegionMatcher implements ICacheKeyMatcher
{
String fRegion;
public RegionMatcher(String pRegion)
{
fRegion=pRegion;
}
public boolean isMatch(Obect pKey)
{
boolean bMatch=false;
if (pKey instanceof AnimalKey)
{
AnimalKey key = (AninmalKey) pKey);
bMatch=(fRegion.equals(key.getRegion());
}
}
}
Использование:
myCache.put(new AnimalKey("North America","mammal", "chews-the-cud");
//remove all entries for 'north america'
IKeyMatcher myMatcher= new AnimalKeyMatcher("North America");
myCache.removeMatching(myMatcher);
Этот механизм имеет простую реализацию, но имеет производительность
недостаток: он должен прокручивать каждую запись, чтобы сделать группу недействительной. (Хотя это все же быстрее, чем вращаться в базе данных).
Вопрос
- ( Предупреждение: это может звучать глупо) Что вы называете этой функцией? OsCache называет это "кеш группы". Ни JbossCache, ни EhCache, похоже, не определяют и не реализуют его. Realm? Область, край? Великобритания
- Существуют ли стандартные шаблоны для этой парадигмы "группы кеша / регион"?
- Как продукты кэширования восходящей звезды (например, ehcache, coherence, jbosscache) решают эту проблему
- Эта парадигма не входит в спецификацию jcache, верно? (JSR-107)
- Как вы справляетесь с "массовым аннулированием"? Кэши велики, пока они не устареют. API, который позволяет вам делать недействительными широкие полосы, является большой помощью. (Например, администратор хочет нажать кнопку и очистить все записи в кэше сообщений, скажем, для определенного форума)
спасибо
будет