JCS Cache shutdown, гарантированное сохранение на диске - PullRequest
6 голосов
/ 09 января 2012

Я использую JCS для кеширования. Теперь я использую дисковый кеш для временного хранения всех данных. Проблема в том, что когда я использую JCS, ключи записываются на диск, только если кеш должным образом отключен.

Я использую шаблон использования диска в качестве ОБНОВЛЕНИЯ, который говорит JCS немедленно записывать данные на диск, не сохраняя их в памяти. Но проблема в том, что мы не поддерживаем список ключей объектов в кэше. Поэтому я использую групповой кэш получить и получить ключи из кэша, а затем перебрать ключи, чтобы получить результаты.

Так что теперь я попал в ситуацию, когда мне нужно правильно отключить кэш, то есть после того, как все данные записаны на диск с использованием индексированного дискового кэша. Но здесь есть сложность, индексированный дисковый кэш использует фоновый поток для записи на диск, который ничего не возвращает по своему состоянию.

Итак, теперь я не могу гарантировать, что индексированный дисковый кэш записал данные на диск в мою реализацию интерфейса. Есть способ справиться с этой ситуацией, потому что сейчас я просто сплю какое-то случайное время (скажем, 10 секунд) до отключения кэша, что на самом деле является очень глупым способом сделать это.

Редактировать: Я сталкиваюсь с этой проблемой и с кешем памяти, но для 500 Мбайт данных не хватает одной секунды. Но случай с дисковым кешем немного отличается.

1 Ответ

0 голосов
/ 23 ноября 2017

Это может быть потому, что ваши объекты хранятся в памяти и ожидают записи на диск. Если вам нужно записать объекты немедленно на диск во время выполнения, вам нужно сделать MaxObjects ваших настроек кеша равными 0.

jcs.region.<yourRegion>.cacheattributes.MaxObjects=0 jcs.region.<yourRegion>.cacheattributes.DiskUsagePattern=UPDATE

Я знаю, что вы уже знаете UPDATE. Снова добавив его для справки.

...