sql >> Databáze >  >> NoSQL >> Redis

Jak přejmenovat pole v hash pro více klíčů v Redis

Ř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.

  1. Nejprve používáme redis-cli --scan --pattern <pattern> Chcete-li získat seznam klíčů, jeden klíč na řádek.
  2. 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.
  3. Potom spustíme skript awk pro každý klíč. Tento skript awk je trochu složitý, takže ho rozebereme
  4. 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.
  5. Pro každý odpovídající klíč příkaz awk nahradí __key__ se skutečným klíčem
  6. Dále převedeme příkaz string do formátu protokolu redis. Toto je surový formát, kterému redis rozumí.
  7. 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

  1. Můžete změnit --pattern a příkaz grep pro výběr klíčů typu hash
  2. Můžete přizpůsobit cmd_template zahrnout pole, která chcete přejmenovat
  3. 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!

  1. Bylo dosaženo maximálního počtu připojení Azure Redis Cache

  2. Implementace vyhodnocení objektu výrazu dotazu typu goMongoDB

  3. Jak zkontrolovat spojení mezi mysql a memcached v php

  4. PHP nemůže najít ovladač MongoDB