Řekněme, že chcete, abyste začali pojmenovávat pole pomocí podtržítek a jiný člen týmu použil camelCase. Nyní jsou vaše redis hashe nepořádek a raději byste se drželi jedné konvence. Potřebujete způsob, jak přejmenovat pole ve všech hashích.
Redis nemá způsob, jak přejmenovat pole v rámci hash. Ale co je důležitější, neexistuje způsob, jak to udělat pro všechny hash, které jste vytvořili.
Naštěstí stačí k nápravě nepořádku trocha magie příkazového řádku.
Tento příkaz najde klíče odpovídající vzoru users:* a poté přejmenuje pole
- datum_vytvoření do Datum_vytvoření
- posttypeid to postTypeId
- view_count to viewCount
- … a tak dále
Chybí příkaz „hrename“
Redis nemá příkaz hrename, takže jej nejprve napíšeme ve skriptu lua. Tento příkaz přejmenuje pole v rámci jednoho hashe.
evalsha <script-sha1-identifier> 1 <key> <old-field-1> <new-field-1>...
Nejprve budete muset načíst skript. Příkaz cat hrename.lua | redis-cli -x script load
načte skript a vrátí identifikátor SHA1. Tento identifikátor můžete použít, kdykoli budete chtít skript vyvolat.
Přejmenování polí ve více hodnotách hash
Nyní, když máme příkaz k opravě jednoho hashe, musíme jej spustit ve smyčce pro všechny hashe, které odpovídají vzoru. Skript hash_bulk_rename_fields.sh
dělá právě to.
- Nejprve používáme
redis-cli --scan --pattern <pattern>
Chcete-li získat seznam klíčů, jeden klíč na řádek. - Dále předáme klíče přes
grep
. Příkaz Redis scan nepřijímá regulární výrazy, takže základní filtrování provádíme pomocí skenování a poté poskytujeme lepší regulární výraz pomocí grep. - Potom spustíme skript awk pro každý klíč. Tento skript awk je trochu složitý, takže ho rozebereme
- Skript awk má šablonu příkazu
evalsha <sha1> 1 __key__ <old field name> <new field name>..
. Toto je příkaz, který se spustí pro všechny klíče. - Pro každý odpovídající klíč příkaz awk nahradí
__key__
se skutečným klíčem - Dále převedeme příkaz string do formátu protokolu redis. Toto je surový formát, kterému redis rozumí.
- Nakonec převedeme nezpracované příkazy do redis-cli pomocí příznaku –pipe. Toto je nejefektivnější způsob odesílání hromadných příkazů společnosti redis.
Přizpůsobení tohoto skriptu
- Můžete změnit
--pattern
a příkaz grep pro výběr klíčů typu hash - Můžete přizpůsobit
cmd_template
zahrnout pole, která chcete přejmenovat - Pokud váš server redis není na localhost, budete muset zadat hostitele, port a heslo dvakrát v příkazu, v podstatě kdykoli zavoláte redis-cli.
Viz také
- Přejmenovat více klíčů pomocí skenování
- Odstranit klíče odpovídající vzoru
- Nastavit expiraci na více klíčů
- GUI RDBTools pro Redis vám umožňuje zobrazit náhled hromadných akcí a poskytuje výkonné GUI pro správu dat v Redis. Je to ke stažení zdarma!