В чем разница между кешированием LRU и кешированием памяти C #

Пожалуйста, простите мой вопрос о новичке, поскольку я все еще младший кодировщик, в чем разница между кешированием LRU с использованием словаря и связанного списка и кэшированием памяти C #, как можно реализовать список LRU, скажем, в кеше памяти.

Заранее спасибо.


person Earl    schedule 19.09.2015    source источник
comment
это не сильно отличается от того, что вы бы сделали на любом другом языке - возможно, если бы вы могли сказать то, что вы пробовали сами, мы могли бы ответить, но прямо сейчас это действительно открытый и широкий вопрос, который на самом деле здесь не подходит (извините)   -  person Random Dev    schedule 19.09.2015
comment
Кэш LRU в целом - это один из способов истечения срока хранения неиспользуемых сущностей внутри вашего кеша. Одной из реализаций LRU является класс MemoryCache в BCL.   -  person Yuval Itzchakov    schedule 19.09.2015


Ответы (2)


LUR - это алгоритм истечения срока действия кеша и добавления нового элемента в ваш кеш. Этот алгоритм истекает для наименее недавно использованного элемента в вашем кеше, когда кеш заполнен. MemoryCache - это класс в .net 4, а после него - способ реализации кэширования внутри кучи. Кэширование можно классифицировать по-разному в зависимости от носителя, который вы кэшируете, вы можете кэшировать на жестком диске или в памяти, в зависимости от расположения памяти, которую вы можете классифицировать как в памяти (внутри кучи) и вне памяти ( память вне кучи, например, на другом сервере). Кэширование памяти в C # использует in-memory, и вы должны быть осторожны, потому что оно может использовать всю память вашего приложения. Так что лучше не использовать его, если у вас более одного узла.

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

person Meysam    schedule 22.06.2016

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

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

Подумайте также, следует ли рассматривать добавление существующей пары "ключ-значение" как `` использованное '' (поэтому недавно обновленный материал, как правило, остается), или если `` используется '' только тогда, когда вы читаете ключ-значение, поэтому вы просто отдаете предпочтение тому, что вы читатель любит. Как всегда, я бы подумал о параллелизме, если он используется более чем одной задачей или потоком.

person andrew pate    schedule 10.06.2019