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

Como renomear campos em hash para várias chaves no Redis


Digamos que você queira começar a nomear campos com under_scores e outro membro da equipe usou camelCase. Agora seus hashes redis estão uma bagunça e você prefere seguir uma convenção. Você precisa de uma maneira de renomear campos em todos os hashes.

O Redis não tem uma maneira de renomear campos em um hash. Mas, mais importante, não há como fazer isso para todos os hashes que você criou.

Felizmente, um pouco de mágica na linha de comando é tudo o que é necessário para consertar a bagunça.




Este comando encontrará as chaves correspondentes ao padrão users:* e renomeará os campos
  • data_de_criação para data_de_criação
  • posttypeid para postTypeId
  • view_count para viewCount
  • … e assim por diante

O comando “hrename” ausente


O Redis não tem um comando hrename, então primeiro escrevemos um no script lua. Este comando renomeará campos dentro de um único hash.


evalsha <script-sha1-identifier> 1 <key> <old-field-1> <new-field-1>...




Você precisará primeiro carregar o script. O comando cat hrename.lua | redis-cli -x script load carrega o script e retorna um identificador SHA1. Você pode usar esse identificador sempre que quiser invocar o script.

Renomeando campos em vários hashes


Agora que temos um comando para corrigir um único hash, precisamos executá-lo em um loop para todos os hashes que correspondem a um padrão. O script hash_bulk_rename_fields.sh faz exatamente isso.
  1. Primeiro, usamos redis-cli --scan --pattern <pattern> para obter uma lista de chaves, uma chave por linha.
  2. Em seguida, passamos as chaves por meio de grep . O comando redis scan não aceita expressões regulares, então fazemos uma filtragem básica com scan e, em seguida, fornecemos uma expressão regular melhor via grep.
  3. Em seguida, executamos um script awk para cada chave. Este script awk é um pouco complexo, então vamos dividi-lo
  4. O script awk tem um modelo de comando evalsha <sha1> 1 __key__ <old field name> <new field name>.. . Este é o comando que será executado para todas as chaves.
  5. Para cada chave correspondente, o comando awk substitui __key__ com a chave real
  6. Em seguida, convertemos o comando string para o formato do protocolo redis. Este é o formato bruto que o redis entende.
  7. Finalmente, canalizamos os comandos brutos para redis-cli usando o sinalizador –pipe. Essa é a maneira mais eficiente de enviar comandos em massa para redis.

Personalizando este script

  1. Você pode alterar --pattern e o comando grep para selecionar as chaves que são do tipo hash
  2. Você pode personalizar cmd_template para incluir os campos que você deseja renomear
  3. Se seu servidor redis não estiver no host local, você terá que fornecer o host, a porta e a senha duas vezes no comando, basicamente sempre que você chama redis-cli.

Veja também

  • Renomear várias chaves usando a digitalização
  • Excluir chaves que correspondem a um padrão
  • Definir expiração para várias chaves
  • A GUI do RDBTools para Redis permite visualizar suas ações em massa e fornece uma GUI poderosa para gerenciar dados no Redis. É um download gratuito!