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

Como o Redis alcança o alto rendimento e desempenho?


Há uma riqueza de informações na documentação do Redis para entender como ele funciona. Agora, para responder especificamente às suas perguntas:

1) Como as conexões são mantidas?

As conexões são mantidas e gerenciadas usando o loop de eventos ae (projetado pelo autor do Redis). Todas as operações de E/S de rede não são bloqueantes. Você pode ver ae como uma implementação minimalista usando o melhor mecanismo de demultiplexação de E/S de rede da plataforma (epoll para Linux, kqueue para BSD, etc...) assim como libevent, libev, libuv, etc...

2) As conexões são TCP ou HTTP?

As conexões são TCP usando o protocolo Redis, que é um protocolo orientado a texto compatível com telnet simples que suporta dados binários. Esse protocolo é normalmente mais eficiente que o HTTP.

3) Como a memória é gerenciada?

A memória é gerenciada com base em um alocador de memória de uso geral. Em algumas plataformas, este é, na verdade, o alocador de memória do sistema. Em algumas outras plataformas (incluindo Linux), o jemalloc foi selecionado por oferecer um bom equilíbrio entre consumo de CPU, suporte a simultaneidade, fragmentação e espaço de memória. o código-fonte do jemalloc faz parte da distribuição Redis.

Ao contrário de outros produtos (como o memcached), não há implementação de um alocador de placas no Redis.

Várias estruturas de dados otimizadas foram implementadas em cima do alocador de uso geral para reduzir o consumo de memória.

4) Quais são as técnicas de sincronização usadas para obter alta taxa de transferência apesar de leituras/gravações concorrentes?

O Redis é um loop de eventos de thread único, portanto, não há sincronização a ser feita, pois todos os comandos são serializados. Agora, alguns threads também são executados em segundo plano para fins internos. Nos raros casos em que eles acessam os dados gerenciados pela thread principal, são usadas primitivas de sincronização pthread clássicas (mutexes, por exemplo). Mas 100% dos acessos de dados feitos em nome de várias conexões de clientes não requerem nenhuma sincronização.

Você pode encontrar mais informações lá:O Redis é de thread único, então como ele faz E/S simultânea?

Qual ​​é a diferença entre uma implementação simples de baunilha de uma máquina com cache de memória e servidor que pode responder a comandos e uma caixa Redis?

Não há diferença. Redis é uma implementação simples de uma máquina com cache de memória e servidor que pode responder a comandos. Mas é uma implementação que é feita corretamente:
  • usando o modelo de loop de evento de encadeamento único
  • usando estruturas de dados simples e minimalistas otimizadas para seus casos de uso correspondentes
  • oferecendo um conjunto de comandos cuidadosamente escolhidos para equilibrar minimalismo e utilidade
  • segmentar constantemente o melhor desempenho bruto
  • bem adaptado aos mecanismos modernos do sistema operacional
  • fornecer vários mecanismos de persistência porque a abordagem "um tamanho serve para todos" é apenas um sonho.
  • fornecendo os blocos de construção para mecanismos de alta disponibilidade (sistema de replicação, por exemplo)
  • evitar empilhar camadas de abstração inúteis como panquecas
  • resultando em uma base de código limpa e compreensível com a qual qualquer bom desenvolvedor C pode se sentir confortável