Производительность Redis на многоядерном процессоре

Я смотрю вокруг redis, чтобы предоставить мне промежуточное хранилище кэша с большим количеством вычислений вокруг операций набора, таких как пересечение и объединение.

Я посмотрел на веб-сайт redis и обнаружил, что redis не предназначен для многоядерного процессора. Мой вопрос в том, почему это так ?

кроме того, если да, то как мы можем сделать 100% использование ресурсов процессора с redis на многоядерных процессорах.

2 ответов


Я посмотрел на веб-сайт redis и обнаружил, что redis не предназначен для многоядерного процессора. Мой вопрос в том, почему это так?

это проектное решение.

Redis однопоточен с epoll/kqueue и масштабируется бесконечно с точки зрения параллелизма ввода-вывода. -- @antirez (создатель Redis)

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

поэтому циклы событий кажутся хорошим дизайном для эффективное & масштабируемость система как Redis.

кроме того, если да, то как мы можем сделать 100% использование ресурсов процессора с redis на многоядерных процессорах.

подход Redis к масштабированию по нескольким ядрам -sharding, в основном вместе с Twemproxy.

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


сервер Redis является однопоточным. Но это позволяет достичь 100% использования ресурсов процессора с помощью узлов Redis (master и/или slave).

  1. операции чтения могут быть масштабированы с помощью конфигурации Redis master / slave с одним мастером. Одно из ядер CPU используется для главного узла, а все остальные-для подчиненных.

  2. операции записи можно масштабировать с помощью конфигурации кластера Redis multi-master. Несколько ядер CPU, используемых для главных узлов и все других рабов.

Рэдиссон - платформа на основе Redis для Java обеспечивает полную поддержку кластера Redis. Работает с AWS Elasticache и кэшем Redis Azure. Он включает обнаружение master/slave и обновление топологии.