Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis é thread único. Então por que devo usar alface?


Porque você gasta tempo não apenas enquanto o Redis executa comandos, mas também transferindo dados (enviando comandos, recebendo resultados). No modo de thread único enquanto você transfere, o Redis não funciona. Enquanto o Redis funciona, nenhuma transferência ocorre. Várias conexões ou uma conexão em pipeline estão aqui para ajudá-lo a saturar a largura de banda e os ciclos de CPU.

E luttece não é apenas sobre velocidade. Também ajuda a organizar melhor seu código com API assíncrona e reativa.

De volta ao tópico de desempenho, aqui está uma referência simples para obter uma compreensão geral do impacto do encadeamento e do pool. Observe que, embora o pooling seja um pouco mais lento (você gasta algum tempo em operações de pool), ele permite isolar ações (para que um erro não afete outros threads) e use MULTI e comandos de bloqueio.

Aqui estão meus resultados (o sistema local tem 4 núcleos, a CPU do sistema remoto é cerca de 2 vezes mais lenta):

Tópicos=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

Tópicos=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

Tópicos=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

Você pode ver aqui que o desempenho escala muito bem com o número de threads, então a alface não é inútil.