2012-06-18 2 views
20

Я использую Dalli до сих пор для кеширования, и сегодня я наткнулся на Redis -Store.Dalli vs Redis-Store for Rails App

Мне интересно, нужно ли переключаться на redisstore. Мое приложение уже использует redis для определенных вещей, поэтому у меня есть redis-сервер, который довольно большой (с точки зрения ресурсов), и у меня также есть еще один сервер memcached. Поэтому, если я переключусь на redis-store, это будет означать, что я могу удалить сервер memcached (меньше серверов для поддержки + меньше стоимости).

Совершил ли кто-нибудь сравнение этих двух решений.

  1. Performance
  2. Это капля в замене (может переключаться между этими 2 в любое время без изменения кода)
  3. Любые другие вещи я должен знать.

ответ

19

Redis может использоваться как кэш или как постоянный магазин, но если вы попытаетесь скомбинировать их, у вас могут возникнуть «интересные проблемы».

Если у вас есть memcached, у вас будет максимальный объем памяти для процесса, поэтому, когда memcached будет заполнен, он автоматически удалит наименее недавно используемые записи, чтобы освободить место для новых записей.

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

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

О производительности, как redis, так и memcached, являются ОЧЕНЬ совершенными, а при различных тестах они находятся на одном уровне, когда дело доходит до получения/извлечения данных, но memcached лучше, когда вам нужен только кеш.

Почему это так? Прежде всего, поскольку memcached имеет только одну миссию, которая хранит ключ/значения, у нее нет никаких накладных расходов, когда дело доходит до хранения метаданных. Redis, с другой стороны, предлагает разные структуры данных, поэтому он хранит больше метаданных, которые каждый ключ. Один из примеров этого: «Дешевле» хранить данные на хеше в Redis вместо использования отдельных ключей. Вы не получите этого на memcached, поскольку есть только один тип данных. Это означает, что с тем же объемом памяти на ваших серверах вы можете хранить больше данных на memcached, чем на redis. Если у вас относительно небольшая установка, вам все равно, но как только вы начнете видеть рост, поверьте мне, вы захотите сохранить эти данные под контролем.

Итак, насколько мне нравится Redis, я предпочитаю иметь memcached для своих потребностей в кешировании и redis для сохранения постоянного хранения/временного хранения/очереди. Я все еще использую redis как «кеш», но не временный с истечением срока действия, а как кэш-память, чтобы сохранить чтение из более дорогого хранилища. Например, я сохраняю сопоставление между идентификаторами пользователей и псевдонимами в Redis. Я никогда не заканчиваю эти сопоставления, поэтому Редис - идеальное место для этого.

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

Смежные вопросы