English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Partitionamento é o processo de dividir dados em múltiplos exemplos Redis, portanto, cada exemplo armazena apenas um subconjunto de chaves.
Através da utilização da soma da memória de múltiplos computadores, permitimos construir um banco de dados maior.
Através de múltiplos núcleos e computadores, permitimos expandir a capacidade de computação; através de múltiplos computadores e adaptadores de rede, permitimos expandir a largura de banda da rede.
Alguns recursos do Redis não se saem muito bem com partitionamento:
Operações que envolvem várias chaves geralmente não são suportadas. Por exemplo, quando dois conjuntos de set são mapeados em diferentes exemplos Redis, você não pode executar operações de interseção nos dois conjuntos de set.
Transações Redis que envolvem várias chaves não podem ser usadas.
Quando se usa partitionamento, o processamento de dados é mais complexo, por exemplo, você precisa lidar com vários arquivos rdb./arquivo aof e fazer backup de arquivos persistentes em múltiplos exemplos e hosts.
Adicionar ou remover capacidade também é complexo. A maioria dos clusters Redis suporta a capacidade de balanceamento de dados transparente ao longo do tempo, mas sistemas como partitionamento de cliente, proxy e outros não suportam essa característica. No entanto, uma técnica chamada presharding pode ajudar.
Existem dois tipos de particionamento Redis. Suponha que haja4exemplos Redis R0, R1, R2, R3, e semelhante a user:1, user:2Essa representação de várias chaves de usuário, para uma chave específica, há várias maneiras de escolher onde essa chave deve ser armazenada no exemplo.
A maneira mais simples de particionar é a particionamento por faixa, que é mapear um intervalo de objetos para um exemplo Redis específico.
por exemplo, ID de 0 a10000 usuários serão armazenados no exemplo R0, ID a partir de10001até 20000 usuários serão armazenados em R1e assim por diante.
Esse método é viável e usado na prática, mas a desvantagem é que você precisa de um mapeamento de intervalo para o exemplo e uma tabela de mapeamento para vários objetos, o que geralmente não é uma boa abordagem para o Redis.
Outra maneira de particionar é a particionamento hash. Isso se aplica a qualquer chave, não precisa ser da forma object_name: como descrito abaixo, simplesmente:
Use uma função hash para transformar a chave em um número, por exemplo, usando crc32 função hash. Execute crc para o key 'foobar'32(foobar) produziria algo como93024922inteiro.
Faça a operação de módulo para esse inteiro, transformando-o em 0-3do número, você pode mapear esse inteiro para4um dos exemplos Redis.93024922 % 4 = 2ou seja, a chave 'foobar' deve ser armazenada em R2No exemplo. Nota: A operação de módulo é o resto da divisão, geralmente implementada com o operador % em várias linguagens de programação.