Memcached, Redis или Couchbase - PullRequest
       32

Memcached, Redis или Couchbase

15 голосов
/ 09 февраля 2012

У меня есть сервер Debian с 16 ГБ ОЗУ, который я использую с nginx и несколькими тяжелыми базами данных mysql и некоторыми пользовательскими приложениями php.Я хотел бы реализовать кэш памяти между Mysql и PHP, но базы данных слишком велики, чтобы хранить все в оперативной памяти.Я думаю, что кеш LRU может быть лучше, насколько я исследую.Это исключает Redis?Couchbase также является соображением.

Ответы [ 4 ]

17 голосов
/ 10 февраля 2012

Предположим, что существует уникальный сервер, на котором запущены экземпляры nginx + php + mysql с некоторым оставшимся свободным ОЗУ. Самый простой способ использовать это ОЗУ для кэширования данных - просто увеличить буферные кеши экземпляров mysql. Базы данных уже используют LRU-подобные механизмы для обработки своих буферов.

Теперь, если вам нужно отодвинуть часть обработки от баз данных, то предварительное кэширование может быть вариантом. Прежде чем говорить о memcached / redis, кэш общей памяти, интегрированный с php, такой как APC, будет эффективен при условии, что рассматривается только один сервер (фактически более эффективный, чем redis / memcached).

Можно считать, что как memcached, так и redis выполняют удаленное кеширование (то есть, чтобы разделить кеш между различными узлами). Я бы не стал исключать Redis для этого: он может быть легко настроен для этой цели. И то, и другое позволит определить предел памяти и обрабатывать кеш с LRU-подобным поведением.

Однако я не стал бы использовать здесь couchbase, который является эластичным (то есть предполагается, что он будет использоваться на нескольких узлах) хранилищем ключей / значений NoSQL (то есть не кеш). Возможно, вы могли бы переместить некоторые данные из ваших экземпляров mysql в кластер couchbase, но использовать их только для кэширования - слишком сложная IMO.

2 голосов
/ 07 января 2015

Как отметил Мэтт Ингентрон, и Хари отметил, что Couchbase поддерживает работу в качестве прямой замены Memcached.Couchbase использует memcached неэластичным способом, так как в каждом узле, участвующем в кластере memcache, дискретность без сохранения, т.е. просто кэш, но couchbase также предлагает типы сегментов Couchbase, которые обеспечивают постоянство.Membase также является частью кода, поэтому Couchbase не только обслуживает данные с диска, но и из ОЗУ и сохраняет их там, реплицируя на другие узлы и сохраняя на диске по мере внесения изменений.Я бы настоятельно рекомендовал Couchbase 3.x как для кэширования, так и для сохранения в одном элементе, или для нескольких элементов, если вы просто хотите, чтобы слой кэширования был отделен от вашего уровня.

2 голосов
/ 15 января 2013

Мы изначально использовали memcached для кэширования данных.В memcached разделение данных для разных приложений в разных сегментах было реальной проблемой. Также у нас есть требование сбрасывать данные из одного сегмента.Данные мониторинга являются еще одним требованием.Мы переехали на Couchbase и использовали ведро в стиле memcache.Я полагаю, гораздо более гибкий и эффективный способ использования кэша Couchbase в стиле memcache для кэширования, а не использования memcached.

1 голос
/ 08 июля 2015

Вы когда-нибудь задумывались о переносе ваших баз данных полностью в оперативную память, используя одно из постоянных решений NoSQL в памяти?Это может занять меньше места, чем исходная база данных MySQL, поскольку многие решения NoSQL обычно занимают меньше места, чем базы данных SQL.Кроме того, если логика на стороне сервера очень важна для вас, попробуйте Tarantool, так как он содержит скрипты Lua и должен занимать довольно мало места.В моих случаях одни и те же данные в Tarantool занимали вдвое меньше, чем в MySQL.Это потому, что они имеют небольшие накладные расходы на строку и поле и используют пакет сообщений для хранения данных.

...