Redis против MemoryCache

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

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


person Gigi    schedule 10.03.2015    source источник
comment
Разве MemoryCache не встроен в сервер приложений? Redis — это сетевой сервер, к которому можно получить доступ с разных клиентов.   -  person Itamar Haber    schedule 10.03.2015


Ответы (1)


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

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

person DhruvPathak    schedule 11.03.2015
comment
Какие преимущества вы получите, выделив его в отдельный процесс? - person Gigi; 11.03.2015
comment
Не просто отдельный процесс, даже отдельный сервер. Одно простое преимущество — разделение модулей в архитектуре, другое — масштабируемость. MemoryCache будет ограничен памятью сервера приложений, тогда как в Redis или Memcached вы можете добавить несколько серверов или увеличить объем памяти сервера Redis, чтобы поддерживать хорошую производительность. - person DhruvPathak; 11.03.2015
comment
Я не уверен. Насколько я знаю, Redis реплицирует ключи между экземплярами, поэтому использование памяти везде будет одинаковым (грубо говоря). - person Gigi; 11.03.2015
comment
@Gigi Я никогда не говорил об использовании памяти, я говорил о масштабируемости. Предположим, что ваш кеш использует 32 ГБ, вы сможете использовать 4 разных сервера по 8 ГБ с Redis или memcache, по-прежнему работая только с 1 веб-сервером. Но с кешем памяти вам пришлось бы множить веб-серверы. Во-вторых, что касается структур данных, вы не можете использовать богатые структуры данных, такие как отсортированный набор, с MemoryCache. - person DhruvPathak; 05.06.2015
comment
Я могу добавить одно преимущество: представьте, что у вас есть веб-приложение MVC, которое кэширует данные, и у вас есть другой WebAPI, который должен использовать одни и те же кэшированные данные, потому что, если у каждого столбца будет свой собственный кеш, вы столкнетесь с несогласованностью, когда данные кэшируются двумя был изменен одним и, таким образом, сделал его кеш недействительным, а другая сторона все еще имела старые кешированные значения... - person a.boussema; 09.07.2015
comment
еще одно преимущество; если состояние сеанса хранится в процессе, и по какой-то причине у вас произошел сбой веб-сервера, все данные в нем будут просто потеряны. Не то же самое, когда данные сеанса кэшируются в другом месте. - person a.boussema; 09.07.2015