Дисковое хранилище Java ehcache - PullRequest
3 голосов
/ 17 сентября 2010

Я работаю над приложением, в котором мне нужно создавать и часто получать доступ к тысячам файлов. По причинам, связанным с использованием дискового пространства, я хочу хранить только фиксированное количество этих файлов в любой момент времени. Например, файлы записываются в C: \ my-folder. Когда моя папка достигает 1000 файлов, если мне нужно сохранить новый файл, я бы хотел стереть файл LRU из моей папки. Возможно ли что-то подобное с помощью ehcache (или любого другого инструмента для кэширования)? Я думал, что могу использовать хранилище дисков в ehcache, но всякий раз, когда я вызываю get в кеше, он смотрит только на ключи, которые находятся в памяти, а не на диске.

Некоторые фрагменты моего кода показаны здесь:

    // create the cache
    CacheManager cm = CacheManager.create();
    String name = getName();
    CacheConfiguration config = new CacheConfiguration(name, 1)
            .maxElementsOnDisk(2000).diskPersistent(true)
            .overflowToDisk(true).eternal(true).diskStorePath(name)
            .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LRU);
    Cache cache = new Cache(config);
    cm.addCache(cache);

    // I do a couple of puts
    cache.put(new Element("key1", val1));
    cache.put(new Element("key2", val2));    
    cache.flush();

    // now key1 is no longer in the cache (since max memory size is 1), but I'd like to look on disk since I have set maxElementsOnDisk to 2000
    Element el = cache.get("key1");

Спасибо

Jeff

1 Ответ

2 голосов
/ 17 сентября 2010

Это не похоже на то, что вы используете EH Cache, так как это возможно ... для хранения 1000 элементов на диске и последующего удаления последнего использованного.EH Cache больше подходит для хранения содержимого в памяти и использования диска в качестве резервной копии при заполнении памяти.

Лично я бы просто свернул свой собственный.У вас очень конкретные бизнес-правила.Храните 1000 предметов.Затем, когда вы будете готовы сохранить файл 1001, вы можете пойти и найти файл для удаления.Если у вас включено время доступа на уровне операционной системы, вы можете выполнить одну команду linux, чтобы удалить файл, к которому недавно обращались ... Обычно вы не используете время доступа к файлам в linux, но это облегчит вашу проблемурешить на уровне ОС ..

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