Introdução
O Redis é um armazenamento de dados de chave-valor em memória, de código aberto. Um armazenamento de dados de chave-valor é um tipo de banco de dados NoSQL no qual as chaves servem como identificadores únicos para seus valores associados. Qualquer instância do Redis inclui vários bancos de dados, cada um dos quais pode conter muitas chaves diferentes de uma variedade de tipos de dados.
Neste tutorial, você aprenderá como selecionar um banco de dados, mover chaves entre bancos de dados e gerenciar e excluir chaves.
Como Usar Este Guia
Este guia é escrito como uma folha de dicas com exemplos autossuficientes. Encorajamos você a pular para qualquer seção que seja relevante para a tarefa que está tentando completar.
Os comandos mostrados neste guia foram testados em um servidor Ubuntu 22.04 executando a versão do Redis 6.0.16. Para configurar um ambiente semelhante, você pode seguir o Passo 1 do nosso guia sobre Como Instalar e Proteger o Redis no Ubuntu 22.04. Demonstraremos como esses comandos se comportam executando-os com redis-cli
, a interface de linha de comando do Redis. Observe que se estiver usando uma interface Redis diferente — Redli, por exemplo — a saída exata de certos comandos pode diferir.
Alternativamente, você pode provisionar uma instância de banco de dados Redis gerenciada para testar esses comandos, mas dependendo do nível de controle permitido pelo seu provedor de banco de dados, alguns comandos neste guia podem não funcionar conforme descrito. Para provisionar um Banco de Dados Gerenciado da DigitalOcean, siga nossa documentação do produto Banco de Dados Gerenciados. Em seguida, você deve instalar o Redli ou configurar um túnel TLS para se conectar ao Banco de Dados Gerenciado por TLS.
Gerenciamento de Bancos de Dados
Fora da caixa, uma instância do Redis suporta 16 bancos de dados lógicos. Esses bancos de dados estão efetivamente isolados uns dos outros, e quando você executa um comando em um banco de dados, não afeta nenhum dos dados armazenados em outros bancos de dados em sua instância do Redis.
Os bancos de dados do Redis são numerados de 0
a 15
e, por padrão, você se conecta ao banco de dados 0
ao se conectar à sua instância do Redis. No entanto, você pode alterar o banco de dados que está usando com o comando select
após a conexão:
- select 15
Se você selecionou um banco de dados diferente de 0
, isso será refletido no prompt do redis-cli
:
-
Para trocar todos os dados armazenados em um banco de dados pelos dados armazenados em outro, use o comando swapdb
. O exemplo a seguir trocará os dados armazenados no banco de dados 6
pelos dados no banco de dados 8
, e qualquer cliente conectado a qualquer um dos bancos de dados poderá implementar as alterações imediatamente:
- swapdb 6 8
swapdb
retornará OK
se a troca for bem-sucedida.
Se você deseja mover uma chave para uma instância diferente do Redis, pode executar migrate
. Este comando garante que a chave exista na instância de destino antes de excluí-la da instância de origem. Ao executar migrate
, o comando deve incluir os seguintes elementos nesta ordem:
- O nome do host ou endereço IP do banco de dados de destino
- O número da porta do banco de dados de destino
- O nome da chave que você deseja migrar
- O número do banco de dados onde deseja armazenar a chave na instância de destino
- A timeout, in milliseconds, which defines the maximum amount of idle communication time between the two machines. Note that this isn’t a time limit for the operation, but means that the operation should always make some level of progress within the defined length of time
Para ilustrar, aqui está um exemplo:
- migrate 203.0.113.0 6379 key_1 7 8000
Além disso, migrate
permite as seguintes opções que você pode adicionar após o argumento de tempo limite:
COPY
: Especifica que a chave não deve ser excluída da instância de origemREPLACE
: Especifica que se a chave já existir no destino, a operaçãomigrate
deve excluí-la e substituí-laKEYS
: Em vez de fornecer uma chave específica para migrar, você pode inserir uma string vazia (""
) e então usar a sintaxe do comandokeys
para migrar qualquer chave que corresponda a um padrão. Para mais informações sobre comokeys
funciona, leia nosso tutorial sobre Como Solucionar Problemas no Redis.
Gerenciando Chaves
Há uma série de comandos do Redis que são úteis para gerenciar chaves, independentemente do tipo de dados que elas contenham. Alguns desses comandos são revisados na seguinte seção.
rename
renomeará a chave especificada. Se for bem-sucedido, retornará OK
:
- rename old_key new_key
Você pode usar randomkey
para retornar uma chave aleatória do banco de dados atualmente selecionado:
- randomkey
Output"any_key"
Use type
para determinar que tipo de dados a chave fornecida contém. A saída deste comando pode ser string
, list
, hash
, set
, zset
ou stream
:
- type key_1
Output"string"
Se a chave especificada não existir, type
retornará none
.
Você pode mover uma chave individual para outro banco de dados em sua instância Redis com o comando move
. O move
recebe o nome de uma chave e o banco de dados para o qual deseja mover a chave como argumentos. Por exemplo, para mover a chave key_1
para o banco de dados 8
, você executaria o seguinte:
- move key_1 8
move
retornará OK
se a movimentação da chave for bem-sucedida.
Exclusão de Chaves
Para excluir uma ou mais chaves de qualquer tipo de dado, use o comando del
seguido por uma ou mais chaves que você deseja excluir:
- del key_1 key_2
Se este comando excluir a(s) chave(s) com sucesso, ele retornará (integer) 1
. Caso contrário, retornará (integer) 0
.
O comando unlink
realiza uma função semelhante ao del
, com a diferença de que o del
bloqueia o cliente enquanto o servidor recupera a memória ocupada pela chave. Se a chave sendo excluída estiver associada a um objeto pequeno, o tempo que o del
leva para recuperar a memória é muito pequeno e o tempo de bloqueio pode nem ser perceptível.
No entanto, pode tornar-se inconveniente se, por exemplo, a chave que está a ser eliminada está associada a muitos objetos, como um hash com milhares ou milhões de campos. Eliminar uma chave assim pode demorar um tempo considerável, e você será impedido de realizar outras operações até que seja completamente removida da memória do servidor.
unlink
, no entanto, primeiro determina o custo de desalocar a memória ocupada pela chave. Se for pequeno, então unlink
funciona da mesma forma que del
, eliminando imediatamente a chave enquanto bloqueia o cliente. No entanto, se houver um alto custo para desalocar memória para uma chave, unlink
irá eliminar a chave de forma assíncrona, criando outro thread e recuperando a memória incrementalmente em segundo plano sem bloquear o cliente:
- unlink key_1
Como é executado em segundo plano, geralmente é recomendado que você use unlink
para remover chaves do seu servidor para reduzir erros nos seus clientes, embora del
também seja suficiente em muitos casos.
Aviso: Os seguintes dois comandos são considerados perigosos. Os comandos flushdb
e flushall
irão eliminar irreversivelmente todas as chaves em um único banco de dados e todas as chaves em todos os bancos de dados no servidor Redis, respectivamente. É recomendado que você só execute esses comandos se tiver absoluta certeza de que deseja excluir todas as chaves no seu banco de dados ou servidor.
Pode ser do seu interesse renomear esses comandos para algo com menor probabilidade de ser executado acidentalmente.
Para deletar todas as chaves no banco de dados selecionado, utilize o comando flushdb
:
- flushdb
Para deletar todas as chaves em todos os bancos de dados em um servidor Redis (incluindo o banco de dados atualmente selecionado), execute o comando flushall
:
- flushall
Ambos flushdb
e flushall
aceitam a opção async
, que permite deletar todas as chaves em um único banco de dados ou em todos os bancos de dados no cluster de forma assíncrona. Isso permite que eles funcionem de forma semelhante ao comando unlink
, e eles criarão uma nova thread para liberar memória incrementalmente em segundo plano.
Fazendo Backup do Seu Banco de Dados
Para criar um backup do banco de dados atualmente selecionado, você pode usar o comando save
:
- save
Isso exportará um snapshot do conjunto de dados atual como um arquivo .rdb
, que é um arquivo de despejo de banco de dados que armazena os dados em um formato de serialização interno e compactado.
save
é executado de forma síncrona e bloqueará qualquer outro cliente conectado ao banco de dados. Portanto, a documentação do comando save
recomenda que este comando quase nunca seja executado em um ambiente de produção. Em vez disso, sugere-se usar o comando bgsave
. Isso diz ao Redis para bifurcar o banco de dados: o processo pai continuará a atender os clientes enquanto o processo filho salva o banco de dados antes de sair:
- bgsave
Note que se os clientes adicionarem ou modificarem dados enquanto a operação bgsave
estiver ocorrendo, essas alterações não serão capturadas no snapshot.
Você também pode editar o arquivo de configuração do Redis para fazer com que o Redis salve um snapshot automaticamente (conhecido como snapshotting ou modo RDB) após um certo período de tempo se um número mínimo de alterações foram feitas no banco de dados. Isso é conhecido como um ponto de salvamento. As seguintes configurações de ponto de salvamento estão habilitadas por padrão no arquivo redis.conf
:
. . .
save 900 1
save 300 10
save 60 10000
. . .
dbfilename "nextfile.rdb"
. . .
Com essas configurações, o Redis exportará um snapshot do banco de dados para o arquivo definido pelo parâmetro dbfilename
a cada 900 segundos se pelo menos uma chave for alterada, a cada 300 segundos se pelo menos 10 chaves forem alteradas, e a cada 60 segundos se pelo menos 10000 chaves forem alteradas.
Você pode usar o comando shutdown
para fazer backup dos seus dados do Redis e então fechar a sua conexão. Este comando bloqueará todos os clientes conectados ao banco de dados e então executará uma operação save
se pelo menos um ponto de salvamento estiver configurado, o que significa que ele exportará o banco de dados em seu estado atual para um arquivo .rdb
enquanto impede que os clientes façam quaisquer alterações.
Além disso, o comando shutdown
irá descarregar as alterações para o arquivo append-only do Redis antes de sair se o modo apenas-append estiver habilitado. O modo de arquivo apenas-append (modo AOF) envolve a criação de um registro de cada operação de escrita no servidor em um arquivo com a extensão .aof
após cada snapshot. Os modos AOF e RDB podem ser habilitados no mesmo servidor, e usar ambos os métodos de persistência é uma maneira eficaz de fazer backup de seus dados.
Em resumo, o comando shutdown
é essencialmente um comando de save
bloqueante que também descarrega todas as alterações recentes para o arquivo append-only e fecha a conexão com a instância do Redis:
Aviso: O comando shutdown
é considerado perigoso. Ao bloquear os clientes do seu servidor Redis, você pode tornar seus dados indisponíveis para usuários e aplicativos que dependem deles. É recomendável que você execute este comando apenas se estiver testando o comportamento do Redis ou se tiver absoluta certeza de que deseja bloquear todos os clientes do seu servidor Redis.
Na verdade, pode ser de seu interesse renomear este comando para algo com uma menor probabilidade de ser executado acidentalmente.
- shutdown
Se você não configurou nenhum ponto de salvamento mas ainda deseja que o Redis execute uma operação de save
, anexe a opção save
ao comando shutdown
:
- shutdown save
Se você configurou pelo menos um ponto de salvamento, mas deseja desligar o servidor Redis sem realizar uma operação de salvamento, você pode adicionar o argumento nosave
ao comando:
- shutdown nosave
Observe que o arquivo somente de acrescentar pode crescer muito ao longo do tempo, mas você pode configurar o Redis para reescrever o arquivo com base em certas variáveis editando o arquivo redis.conf
. Você também pode instruir o Redis a reescrever o arquivo somente de acrescentar executando o comando bgrewriteaof
:
- bgrewriteaof
bgrewriteaof
criará o conjunto mais curto de comandos necessários para trazer o banco de dados de volta ao seu estado atual. Como o nome deste comando sugere, ele será executado em segundo plano. No entanto, se outro comando de persistência estiver sendo executado em um processo em segundo plano, esse comando deve ser concluído antes que o Redis execute bgrewriteaof
.
Conclusão
Este guia detalha uma série de comandos usados para gerenciar bancos de dados e chaves. Se houver outros comandos relacionados, argumentos ou procedimentos que você gostaria de aprender neste guia, por favor, pergunte ou faça sugestões nos comentários.
Para obter mais informações sobre os comandos do Redis, confira nossa série de tutoriais sobre Como Gerenciar um Banco de Dados Redis.
Source:
https://www.digitalocean.com/community/cheatsheets/how-to-manage-redis-databases-and-keys