O Redis é um datastore ou armazenamento de dados open-source de chave-valor na memória. Um datastore de chave-valor é um tipo de banco de dados NoSQL no qual chaves servem como identificadores exclusivos para seus valores associados. Qualquer instância Redis inclui um número de bancos de dados, cada um dos quais podendo conter muitas chaves diferentes de uma variedade de tipos de dados. Neste tutorial, veremos como selecionar um banco de dados, mover chaves entre bancos de dados e gerenciar e excluir chaves.
Este guia está no formato de referência rápida com trechos de linha de comando independentes. Recomendamos que você pule para qualquer seção que seja relevante para a tarefa que você está tentando concluir.
Os comandos mostrados neste guia foram testados em um servidor Ubuntu 18.04 executando a versão 4.0.9 do Redis. Para configurar um ambiente semelhante, você pode seguir o Passo 1 do nosso guia Como Instalar e Proteger o Redis no Ubuntu 18.04. Vamos demonstrar como esses comandos se comportam executando-os com redis-cli
, a interface de linha de comando do Redis. Observe que se você estiver usando uma interface Redis diferente — Redli, por exemplo — a saída exata de certos comandos pode ser diferente.
Como alternativa, você pode provisionar uma instância de banco de dados Redis gerenciada para testar esses comandos, mas observe que, dependendo do nível de controle permitido pelo seu provedor de banco de dados, alguns comandos neste guia podem não funcionar como descrito. Para provisionar um banco de dados gerenciado na DigitalOcean, siga nossa documentação de produto para Managed Databases. Então, você deve instalar ou o Redli ou configurar um túnel TLS para conectar-se ao banco de dados gerenciado por TLS.
Nativamente, uma instância do Redis suporta 16 bancos de dados lógicos. Esses bancos de dados são efetivamente isolados um do outro e, quando você executa um comando em um banco de dados, ele não afeta nenhum dado armazenado em outros bancos de dados na sua instância do Redis.
Os bancos de dados 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 Redis. No entanto, você pode alterar o banco de dados que está usando com o comando select
após conectar-se:
- select 15
Se você selecionou um banco de dados diferente de 0
, ele será refletido no prompt do redis-cli
:
-
Para trocar todos os dados mantidos em um banco de dados pelos dados mantidos em outro, use o comando swapdb
. O exemplo a seguir trocará os dados mantidos no banco de dados 6
pelos dados no banco de dados 8
, e quaisquer clientes conectados a quaisquer dos bancos de dados poderão ver as alterações imediatamente:
- swapdb 6 8
O swapdb
retornará OK
se a troca for bem-sucedida.
Se você deseja mover uma chave para uma instância diferente do Redis, você pode executar migrate
. Este comando garante que a chave exista na instância de destino antes de excluí-la da instância de origem. Quando você executa migrate
, o comando deve incluir os seguintes elementos nesta ordem:
Para ilustrar:
- migrate 203.0.113.0 6379 key_1 7 8000
Além disso, o 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ção migrate
deve excluí-la e substituí-laKEYS
: Em vez de fornecer uma chave específica para migrar, você pode inserir uma string vazia (""
) e, em seguida, usar a sintaxe do comando keys
para migrar qualquer chave que corresponda a um padrão. Para mais informações sobre como funciona o keys
, consulte nosso tutorial How To Troubleshoot Issues in Redis.Existem vários comandos Redis que são úteis para gerenciar chaves, independentemente do tipo de dados que elas mantêm. Vamos abordar alguns deles nesta seção.
O rename
renomeará a chave especificada. Se for bem sucedido, ele retornará OK
:
- rename old_key new_key
Você pode utilizar o randomkey
para retornar uma chave aleatória do banco de dados selecionado no momento:
- 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, o 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
pega o nome de uma chave e o banco de dados para o qual você 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 foi bem-sucedida.
Para excluir uma ou mais chaves de qualquer tipo de dados, use o comando del
seguido por uma ou mais chaves que você deseja excluir:
- del key_1 key_2
Se este comando excluir as chaves com êxito, ele retornará (integer) 1
. Caso contrário, ele retornará (integer) 0
.
O comando unlink
executa uma função semelhante a del
, com a diferença de que del
bloqueia o cliente enquanto o servidor recupera a memória ocupada pela chave. Se a chave que está sendo excluída estiver associada a um objeto pequeno, a quantidade de tempo que leva para o del
recuperar a memória é muito pequena e o tempo de bloqueio pode nem ser perceptível.
No entanto, isso pode ser inconveniente se, por exemplo, a chave que você está excluindo estiver associada a muitos objetos, como um hash com milhares ou milhões de campos. A exclusão de uma chave desse tipo pode demorar muito e você não poderá executar outras operações até que seja totalmente removida da memória do servidor.
O unlink
, no entanto, primeiro determina o custo de desalocar a memória ocupada pela chave. Se for pequeno, o unlink
funciona da mesma maneira que o del
para a chave, enquanto também bloqueia o cliente. No entanto, se houver um alto custo para desalocar a memória de uma chave, o unlink
excluirá a chave de forma assíncrona, criando outra thread e recuperando progressivamente a memória em segundo plano sem bloquear o cliente:
- unlink key_1
Como ele é executado em segundo plano, geralmente é recomendável que você use o unlink
para remover chaves do seu servidor para reduzir erros em seus clientes, embora o del
também seja suficiente em muitos casos.
Atenção: Os dois comandos a seguir são considerados perigosos. Os comandos flushdb
e flushall
excluirão irreversivelmente todas as chaves em um único banco de dados e todas as chaves em todos os bancos de dados no servidor Redis, respectivamente. Recomendamos que você execute esses comandos apenas se tiver certeza absoluta de que deseja excluir todas as chaves do seu banco de dados ou servidor.
Pode ser do seu interesse renomear esses comandos (veja o Passo 5) para algo com menor probabilidade de ser executado acidentalmente.
Para excluir todas as chaves no banco de dados selecionado, use o comando flushdb
:
- flushdb
Para excluir todas as chaves em todos os bancos de dados em um servidor Redis (incluindo o banco de dados atualmente selecionado), execute flushall
:
- flushall
Ambos flushdb
e flushall
aceitam a opção async
, que lhe permite excluir todas as chaves em um único banco de dados ou todos os bancos de dados no cluster de forma assíncrona. Isso permite que eles funcionem de maneira semelhante ao comando unlink
, e eles criarão uma nova thread para liberar incrementalmente a memória em segundo plano.
Para criar um backup do banco de dados selecionado atualmente, você pode usar o comando save
:
- save
Isso exportará um instantâneo ou snapshot do dataset atual como um arquivo .rdb
, que é um arquivo de dump de banco de dados que mantém os dados em um formato interno de serialização compactado.
O save
é executado de forma síncrona e bloqueará quaisquer outros clientes conectados ao banco de dados. Portanto, a documentação do comando save
recomenda que esse comando quase nunca seja executado em um ambiente de produção. Em vez disso, sugere o uso do comando bgsave
. Isso indica ao Redis para fazer um fork do banco de dados: o pai continuará a servir 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 modo snapshotting ou RDB) após um certo período de tempo, se um número mínimo de alterações tiver sido feito no banco de dados. Isso é conhecido como salvar ponto. As seguintes configurações de ponto de salvamento são ativadas 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 1 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 depois fechar sua conexão. Este comando bloqueará todos os clientes conectados ao banco de dados e executará uma operação save
se pelo menos um ponto de salvamento estiver configurado, o que significa que exportará o banco de dados em seu estado atual para um arquivo .rdb
, impedindo que os clientes façam quaisquer alterações.
Além disso, o comando shutdown
liberará as alterações no arquivo append-only do Redis antes de sair se o modo append-only estiver ativado.O arquivo append-only (AOF) envolve a criação de um log de todas as operações de gravação no servidor em um arquivo que termina em .aof
após cada snapshot. Os modos AOF e RDB podem ser ativados no mesmo servidor e o uso dos dois métodos de persistência é uma maneira eficaz de fazer backup de seus dados.
Resumindo, o comando shutdown
é essencialmente um comando save
bloqueador que também libera todas as alterações recentes no arquivo append-only e fecha a conexão com a instância Redis:
Atenção: O comando shutdown
é considerado perigoso. Ao bloquear os clientes do servidor Redis, você pode tornar seus dados indisponíveis para usuários e aplicações que dependem deles. Recomendamos que você execute este comando apenas se estiver testando o comportamento do Redis ou tiver certeza absoluta de que deseja bloquear todos os clientes do seu servidor Redis.
Pode ser do seu interesse renomear esses comandos (veja o Passo 5) para algo com 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 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 executar um salvamento, é possível adicionar o argumento nosave
ao comando:
- shutdown nosave
Observe que o arquivo append-only 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 append-only executando o comando bgrewriteaof
:
- bgrewriteaof
O bgrewriteaof
criará o menor conjunto de comandos necessários para trazer o banco de dados de volta ao seu estado atual. Como o nome deste 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á terminar antes que o Redis execute bgrewriteaof
.
Este guia detalha vários comandos usados para gerenciar bancos de dados e chaves. Se houver outros comandos, argumentos ou procedimentos relacionados que você queira ver neste guia, peça ou faça sugestões nos comentários abaixo.
Para obter mais informações sobre comandos Redis, consulte nossa série de tutoriais Como Gerenciar um Banco de Dados Redis.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!