Redis
 sql >> Database >  >> NoSQL >> Redis

Come rinominare i campi in hash per più chiavi in ​​Redis

Supponiamo che tu voglia iniziare a nominare i campi con under_scores e che un altro membro del team abbia utilizzato camelCase. Ora i tuoi hash redis sono un disastro e preferiresti attenersi a una convenzione. Hai bisogno di un modo per rinominare i campi in tutti gli hash.

Redis non ha un modo per rinominare i campi all'interno di un hash. Ma soprattutto, non c'è modo di farlo per tutti gli hash che hai creato.

Fortunatamente, un po' di magia da riga di comando è tutto ciò che serve per sistemare il pasticcio.


Questo comando troverà le chiavi che corrispondono agli utenti del modello:*, quindi rinomina i campi

  • data_creazione a data_creazione
  • da
  • posttypeid a postTypeId
  • conteggio_visualizzazioni per conteggio visualizzazioni
  • ... e così via

Il comando "hrename" mancante

Redis non ha un comando hrename, quindi prima ne scriviamo uno nello script lua. Questo comando rinominerà i campi all'interno di un singolo hash.

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


Dovrai prima caricare lo script. Il comando cat hrename.lua | redis-cli -x script load carica lo script e restituisce un identificatore SHA1. Puoi utilizzare questo identificatore ogni volta che vuoi richiamare lo script.

Rinominare i campi in più hash

Ora che abbiamo un comando per correggere un singolo hash, dobbiamo eseguirlo in un ciclo per tutti gli hash che corrispondono a un modello. Lo script hash_bulk_rename_fields.sh fa proprio questo.

  1. In primo luogo, utilizziamo redis-cli --scan --pattern <pattern> per ottenere un elenco di chiavi, una chiave per riga.
  2. Successivamente, passiamo le chiavi tramite grep . Il comando Redis scan non accetta espressioni regolari, quindi eseguiamo il filtraggio di base con scan e quindi forniamo un'espressione regolare migliore tramite grep.
  3. Quindi eseguiamo uno script awk per ogni chiave. Questo script awk è un po' complesso, quindi lo analizzeremo
  4. Lo script awk ha un modello di comando evalsha <sha1> 1 __key__ <old field name> <new field name>.. . Questo è il comando che verrà eseguito per tutte le chiavi.
  5. Per ogni chiave corrispondente, il comando awk sostituisce __key__ con la chiave vera e propria
  6. Successivamente, convertiamo il comando string nel formato del protocollo redis. Questo è il formato non elaborato che redis comprende.
  7. Infine, convogliamo i comandi grezzi su redis-cli usando il flag –pipe. Questo è il modo più efficiente per inviare comandi in blocco a redis.

Personalizzazione di questo script

  1. Puoi cambiare --pattern e il comando grep per selezionare le chiavi di tipo hash
  2. Puoi personalizzare cmd_template per includere i campi che vuoi rinominare
  3. Se il tuo server Redis non è su localhost, dovrai fornire l'host, la porta e la password due volte nel comando, praticamente ogni volta che chiami redis-cli.

Vedi anche

  • Rinomina più chiavi utilizzando la scansione
  • Elimina le chiavi corrispondenti a uno schema
  • Imposta Scadenza su più chiavi
  • La GUI di RDBTools per Redis ti consente di visualizzare in anteprima le tue azioni in blocco e fornisce una potente GUI per gestire i dati in Redis. È un download gratuito!