Pattern.compile () из кэшированной строки против кэширования скомпилированного шаблона - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть набор шаблонов, которые я сопоставляю с каждым запросом, чтобы определить, что делать.Количество шаблонов сейчас ~ 60, но вскоре оно увеличится до более чем 1000.

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

Pattern.compile() действительно быстро, и я не уверен, стоит ли мне кэшировать шаблон компиляции или строку.Pattern кажется Serializable.Есть ли проблема с кэшированием Pattern объектов?

Редактировать

Я использую удаленный бесконечный промежуток.Это распределенный кеш.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Есть ли какие-либо проблемы с кэшированием объектов Pattern?

Вы можете сделать оба варианта: либо кэшировать строку шаблона, либо объект Pattern.Я рекомендую кэшировать строку шаблона в распределенном кэше.

Посмотрев на внутреннюю часть объекта Pattern, вы увидите, что на самом деле только оригинальная строка шаблона сериализуется.Это означает, что при десериализации (то есть при выборке из распределенного кэша) экземпляру Pattern необходимо снова построить внутреннее дерево разбора.

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

Если ваши шаблоны сложны, создание дерева объектов снова обходится дороже.Чтобы обойти это, вам нужен внутрипроцессный кеш, который кэширует фактическую ссылку на объект.Вы можете объединить их с распределенным кешем.Современный внутрипроцессный кэш с самым быстрым временем доступа - это кофеин или cache2k .Сколько времени вы можете сэкономить, зависит от вашего общего сценария.

0 голосов
/ 19 сентября 2018

Из Javadoc :

Экземпляры этого класса являются неизменяемыми и безопасны для использования несколькими параллельными потоками.

Итак,Все средства компилируют их один раз и используют повторно.

Pattern.compile () действительно быстрый

Он довольно быстрый, но без необходимости запускать его без необходимости - быстрее.

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