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.
- In primo luogo, utilizziamo
redis-cli --scan --pattern <pattern>
per ottenere un elenco di chiavi, una chiave per riga. - 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. - Quindi eseguiamo uno script awk per ogni chiave. Questo script awk è un po' complesso, quindi lo analizzeremo
- 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. - Per ogni chiave corrispondente, il comando awk sostituisce
__key__
con la chiave vera e propria - Successivamente, convertiamo il comando string nel formato del protocollo redis. Questo è il formato non elaborato che redis comprende.
- 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
- Puoi cambiare
--pattern
e il comando grep per selezionare le chiavi di tipo hash - Puoi personalizzare
cmd_template
per includere i campi che vuoi rinominare - 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!