Redis — однопоточный. Тогда почему я должен использовать салат?

После Redis 4.0 Redis может выполнять некоторые функции в многопоточном режиме (1. удаление объектов в фоновом режиме и т. д.), но Redis по-прежнему обычно использует один поток. Часто задаваемые вопросы — Redis

Так что я думаю, салат бесполезен. Lettuce — это клиент Redis, который может использовать несколько потоков в одном соединении, но Redis может использовать только один поток в одном соединении.

Можете ли вы порекомендовать использовать салат для клиента Redis? Почему?


person Sujung Shin    schedule 21.03.2018    source источник


Ответы (1)


Потому что вы тратите время не только на то, пока Redis выполняет команды, но и на передачу данных (отправка команд, получение результатов). В однопоточном режиме во время переноса Redis не работает. Пока Redis работает, передачи не происходит. Множественные соединения или одно конвейерное соединение здесь, чтобы помочь вам насытить как полосу пропускания, так и циклы ЦП.

И люттече — это не только скорость. Это также поможет вам лучше организовать код с помощью асинхронного и реактивного API.

Возвращаясь к теме производительности, здесь приведен простой тест, позволяющий получить общее представление о влиянии потоков и пулов. Обратите внимание, что хотя объединение в пул немного медленнее (вы тратите некоторое время на операции с пулом), оно позволяет вам изолировать действия (чтобы ошибка не влияла на другие потоки) и использовать MULTI и блокирующие команды.

Вот мои результаты (локальная система имеет 4 ядра, процессор удаленной системы примерно в 2 раза медленнее):

Темы=1

Benchmark              (address)   Mode  Cnt      Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25  35389.995 ± 1325.198  ops/s
LettuceThreads.pooled  localhost  thrpt   25  32075.870 ±  416.220  ops/s
LettuceThreads.pooled     remote  thrpt   25   3883.193 ±   67.622  ops/s
LettuceThreads.shared     socket  thrpt   25  39419.772 ± 1966.023  ops/s
LettuceThreads.shared  localhost  thrpt   25  34293.245 ± 1737.349  ops/s
LettuceThreads.shared     remote  thrpt   25   3919.251 ±   49.897  ops/s

Темы=2

Benchmark              (address)   Mode  Cnt      Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25  56938.187 ± 2727.772  ops/s
LettuceThreads.pooled  localhost  thrpt   25  49420.748 ± 2091.631  ops/s
LettuceThreads.pooled     remote  thrpt   25   7791.706 ±  133.507  ops/s
LettuceThreads.shared     socket  thrpt   25  81195.900 ± 1593.424  ops/s
LettuceThreads.shared  localhost  thrpt   25  78404.688 ± 3878.044  ops/s
LettuceThreads.shared     remote  thrpt   25   3992.023 ±   39.092  ops/s

Темы=4

Benchmark              (address)   Mode  Cnt       Score      Error  Units
LettuceThreads.pooled     socket  thrpt   25   87345.126 ± 8149.009  ops/s
LettuceThreads.pooled  localhost  thrpt   25   75003.031 ± 4481.289  ops/s
LettuceThreads.pooled     remote  thrpt   25   15807.410 ±  225.376  ops/s
LettuceThreads.shared     socket  thrpt   25  169112.489 ± 3749.897  ops/s
LettuceThreads.shared  localhost  thrpt   25  115464.778 ± 5099.728  ops/s
LettuceThreads.shared     remote  thrpt   25    7952.492 ±  133.521  ops/s

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

person Imaskar    schedule 11.05.2018
comment
Не могли бы вы поделиться примером кода для настройки количества соединений в пуле соединений для Lettuce? Не удалось найти ни одного хорошего источника. - person user1571307; 09.03.2021