Высокая частота параллелизма для кэша

Я изучаю кэширование и имею вопрос о параллелизме кэша.

Как я знаю, кэширование LRU реализовано с двойным связанным списком + хэш-таблицей. Тогда как кэш LRU обрабатывает высокий частый параллелизм? Обратите внимание, как получать данные из кэша и ввод данных в кэш обновит список и хэш-таблицы, так что кэш изменяется все время.

Если мы используем блокировку мьютекса для потокобезопасности, не будет ли скорость замедляться, если кэш посещается большими количество людей? Если мы не используем lock, какие методы используются? Спасибо заранее.

1 ответов


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

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

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

подход ConcurrentLinkedHashMap (КЖХЗ), а впоследствии кэш гуавы, чтобы записать в буфер. Этот буфер сливается под блокировкой LRU и с помощью try-lock никакая другая операция не должна быть заблокирована. CLHM использует несколько кольцевых буферов с потерями, если кэш не может идти в ногу, так как проигрышные события предпочтительнее деградации спектакль.

подход Ehcache и Рэдис является вероятностной политикой LRU. Чтение обновляет метку времени записи, а запись выполняет итерацию кэша для получения случайной выборки. Самая старая запись исключается из этого образца. Если образец быстро построить и кэш большой, выселенная запись, вероятно, хороший кандидат.

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