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

O método mais rápido para mover dados redis para o MySQL


Existe alguma outra maneira de despejar big data do Redis para o MySQL?

O Redis tem a possibilidade (usando bgsave) de gerar um dump dos dados de forma não bloqueante e consistente.

https://github.com/sripathikrishnan/redis-rdb-tools

Você pode usar o pacote conhecido de Sripathi Krishnan para analisar um arquivo de despejo redis (RDB) em Python e preencher a instância do MySQL offline. Ou você pode converter o dump do Redis para o formato JSON e escrever scripts em qualquer idioma que desejar para preencher o MySQL.

Essa solução só é interessante se você quiser copiar os dados completos da instância do Redis para o MySQL.

O Redis tem algum sistema de gatilho que eu possa usar para evitar os crons como o sistema de fila?

O Redis não tem conceito de trigger, mas nada impede que você poste eventos nas filas do Redis toda vez que algo deve ser copiado para o MySQL. Por exemplo, em vez de:
# Add an item to a user shopping cart
RPUSH user:<id>:cart <item>

você poderia executar:
# Add an item to a user shopping cart
MULTI
RPUSH user:<id>:cart <item>
RPUSH cart_to_mysql <id>:<item>
EXEC

O bloco MULTI/EXEC o torna atômico e consistente. Então você só precisa escrever um pequeno daemon esperando nos itens da fila cart_to_mysql (usando comandos BLPOP). Para cada item desenfileirado, o daemon precisa buscar os dados relevantes do Redis e preencher a instância do MySQL.

O Redis falha em nossos dados de armazenamento em arquivo, então é possível armazenar esses dados diretamente no banco de dados MySQL?

Não sei se entendi a pergunta aqui. Mas se você usar a solução acima, a latência entre as atualizações do Redis e as atualizações do MySQL será bastante limitada. Portanto, se o Redis falhar, você perderá apenas as últimas operações (ao contrário de uma solução baseada em tarefas cron). É claro que não é possível ter 100% de consistência na propagação de dados.