Introdução
Redis é um armazenamento de dados open-source, baseado em chave-valor e em memória. Um armazenamento de dados chave-valor é um tipo de banco de dados NoSQL no qual chaves funcionam como identificadores únicos para seus respectivos valores. Qualquer instância do Redis inclui um número de banco 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 autocontidos. Encorajamos você a pular para qualquer seção que seja relevante para a tarefa que você está tentando realizar.
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 a Etapa 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. Note que, se estiver usando uma interface Redis diferente, como Redli, por exemplo, a saída exata de certos comandos pode ser diferente.
Alternativamente, você pode provisionar uma instância gerenciada de banco de dados Redis para testar esses comandos. No entanto, 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 a nossa documentação do Produto de Bancos 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.
Gerenciando Bancos de Dados
Fora da caixa, uma instância do Redis suporta 16 bancos de dados lógicos. Esses bancos de dados são efetivamente isolados entre si, 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
quando se conecta à 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 todos os clientes conectados a qualquer um dos bancos poderão implementar alterações imediatamente:
- swapdb 6 8
swapdb
retornará OK
se a troca for bem-sucedida.
Se você quiser 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 você 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 timeout:
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 obter mais informações sobre comokeys
funciona, leia nosso tutorial sobre Como Solucionar Problemas no Redis.
Gerenciamento de Chaves
Há vários comandos do Redis que são úteis para gerenciar chaves, independentemente do tipo de dados que elas contêm. Alguns desses comandos são revisados na seção a seguir.
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 na sua instância do Redis com o comando move
. O move
recebe como argumentos o nome de uma chave e o banco de dados para o qual você deseja mover a chave. 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.
Excluindo Chaves
Para excluir uma ou mais chaves de qualquer tipo de dado, use o comando del
seguido de 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 necessário para o del
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 você está deletando está associada a muitos objetos, como um hash com milhares ou milhões de campos. Deletar tal chave pode levar um tempo considerável, e você será bloqueado 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 maneira que del
removendo imediatamente a chave enquanto bloqueia o cliente. No entanto, se houver um alto custo para desalocar memória para uma chave, unlink
irá excluir a chave de forma assíncrona criando outra thread e recuperando incrementalmente a memória 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 deletar 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ê execute esses comandos apenas 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, use 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 flushall
:
- flushall
Ambos os comandos flushdb
e flushall
aceitam a opção async
, que permite deletar todas as chaves de um único banco de dados ou de todos os bancos de dados no cluster de forma assíncrona. Isso permite que eles funcionem de maneira similar 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 dump do banco de dados que armazena os dados em um formato de serialização interno e comprimido.
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 seja quase nunca 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
Observe 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 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 foi feito 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 de seus dados do Redis e então fechar sua conexão. Este comando bloqueará todos os clientes conectados ao banco de dados e então realizará 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 de registro do Redis antes de sair se o modo append-only estiver habilitado. O modo de arquivo somente de acréscimos (AOF) envolve criar 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 forma eficaz de fazer backup dos 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 de registro de acréscimos 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 inacessí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.
De fato, pode ser do 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
, acrescente 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 de registro apenas em anexos pode crescer muito ao longo do tempo, mas você pode configurar o Redis para reescrever o arquivo com base em determinadas variáveis editando o arquivo redis.conf
. Você também pode instruir o Redis a reescrever o arquivo de registro apenas em anexos executando o comando bgrewriteaof
:
- bgrewriteaof
bgrewriteaof
criará o menor conjunto de comandos necessários para restaurar o banco de dados ao seu estado atual. Como o nome desse comando implica, ele será executado em segundo plano. No entanto, se outro comando de persistência já estiver sendo executado em um processo em segundo plano, esse comando deverá 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, argumentos ou procedimentos relacionados 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