Как реализовать последний использованный кеш

Решение:

Использовать шаблонный модификатор sU получит желаемое соответствие в PHP.

example:

preg_match('/(.*)/sU',$content,$match);

Источник:

http://dreamluverz.com/developers-tools/regex-match-all-including-newline http://php.net/manual/en/reference.pcre .pattern.modifiers.php

13
задан izb 25 February 2009 в 08:24
поделиться

4 ответа

Наборы Java обеспечивают LinkedHashMap из поля, которое является подходящим к созданию кэшей. У Вас, вероятно, нет этого в ME Java, но можно захватить исходный код здесь:

http://kickjava.com/src/java/util/LinkedHashMap.java.htm

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

документы содержат инструкции для создания Кэша MRU путем переопределения removeEldestEntry(Map.Entry) метод. Все, что действительно необходимо сделать, делают класс, который расширяется LinkedHashMap, и переопределите метод как так:

private static final int MAX_ENTRIES = 100;

protected boolean removeEldestEntry(Map.Entry eldest) {
   return size() > MAX_ENTRIES;
}

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

public LinkedHashMap(int initialCapacity,
                     float loadFactor,
                     boolean accessOrder)

Передача верный для порядка использования и ложь для порядка вставки.

23
ответ дан Todd Gamblin 25 February 2009 в 08:24
поделиться

ConcurrentLinkedHashMap трудно создать, из-за требований блокировки. LinkedHashMap с блокировкой прост, но не всегда производителен. Параллельная версия попыталась бы уменьшить объем блокировки, или разделением блокировки или идеально созданием операций CAS для создания блокировки очень дешевой. Если операции CAS когда-нибудь становятся дорогими, то так же разделение блока может быть полезным. Поскольку LRU требует записей для каждой операции доступа и использует двунаправленный связанный список, это очень хитро для реализации с чистыми операциями CAS. Я делал попытку его, но я должен продолжить становиться зрелым свой алгоритм. При поиске ConcurrentLinkedHashMap Вы будете видеть мою страницу проекта...

, Если бы ME Java не поддерживает операции CAS, которые я ожидал бы быть верным, тогда основная синхронизация - все, что можно сделать. Это, вероятно, достаточно хорошо с LHM, учитывая, что я только видел, что проблемы производительности в высоком потоке рассчитывают на серверную сторону. Так +1 к ответам выше.

7
ответ дан Ben Manes 25 February 2009 в 08:24
поделиться

Почему реализация что-то уже реализованное? Используйте Ehcache.

Однако , если сторонние библиотеки полностью вне рассмотрения, я предполагаю, что Вы надеетесь реализовывать структуру данных, которая выглядит примерно так:

  • В основном HashMap (расширяется HashMap<Object, Object>, если Вы будете)
  • , Каждое значение в Карте указывает на объект в отсортированном списке, на основе которого больше всего используется.
  • Объекты, недавно используемые, добавляются к заголовку списка - O(1)
  • Производящий чистку последний использованный, означает усекать конец списка - O(1)
  • , Все еще дает Вам поиски Карты, но все еще сохраняет недавно используемые объекты сначала...
2
ответ дан Yuval Adam 25 February 2009 в 08:24
поделиться

Другой подход может быть должен смотреть на раздел 5.6 в Параллелизм Java на практике Brian Goetz: "Создавая эффективный, масштабируемый кэш результата". Смотрите на Memoizer, хотя Вам, вероятно, придется настроить его в Ваших целях.

Как в стороне, то, что я не могу выяснить, - то, почему Java не имеет ConcurrentLinkedHashMap из поля. Эта структура данных была бы очень полезна для создания кэша.

0
ответ дан Julien Chastang 25 February 2009 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: