Реализация пользовательского кэширования в Java


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

Уровень кэша будет находиться между приложением и уровнем базы данных: без кэширования базы данных, без Spring, без Hibernate, без EHcache, без http-кэширования.

Мы можем использовать файловую систему или базу данных nano, чтобы кэш можно было восстановить, чтобы кэш можно было восстановить после перезапуска процесса.

Я попробовал LRU Кэш:

Http://stackoverflow.com/questions/224868/easy-simple-to-use-lru-cache-in-java

Http://www.programcreek.com/2013/03/leetcode-lru-cache-java/

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

У кого-нибудь есть лучшие входные данные для реализации механизма кэширования в Java?

1 2

1 ответ:

Но я не уверен, как после переполнения я должен сохранить базу данных в базу данных(какую базу данных будет лучше использовать для более быстрой вставки ans seek ok data) или я должен использовать файловую систему?

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

Если у вас есть значения небольшого размера, хранение их в виде отдельных файлов будет большой нагрузкой, поэтому лучше хранить кэшированные данные. записи в один или несколько файлов. Чтобы реализовать это, вам нужно изучить "внешние индексы" и "управление памятью" или "управление свободным пространством" (например, стратегии best fit, next fit и compaction). Это фактически приводит к реализации крошечной базы данных, поэтому можно использовать один:) некоторые вещи, которые приходят мне на ум: LevelDB, MapDB, LMDB, RocksDB

Имейте в виду, что операции кэширования поступают одновременно из приложения, поэтому кэш может удалить значение и запрос к одному и тому же ключ может прийти в то же самое время. Будете ли вы реализовывать только базовые операции, такие как Cache.get и Cache.put, или также CAS-операции, такие как Cache.putIfAbsent? Вы хотите эффективно использовать многоядерные системы, как это принято сегодня?

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

У кого-нибудь есть лучшие входные данные для реализации механизма кэширования в Java?

Вы можете прочитать мой блог по адресу cruftex.net для некоторого дополнительного ввода в реализуйте легкое и быстрое кэширование в Java.

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

Моя собственная высокопроизводительная реализация кэша Java cache2k, функции CAS-операций, событий, загрузчиков и писателей, истечения срока действия и т. д. и это в конечном счете приведет к некоторому переполнению диска. Однако я не такой. уверен насчет временных рамок... Когда вы заинтересованы работать в этой области: вклады приветствуются!