sql >> Database >  >> NoSQL >> Redis

Velden hernoemen in hash voor meerdere sleutels in Redis

Stel dat u wilt beginnen met het benoemen van velden met under_scores, en een ander teamlid gebruikte camelCase. Nu zijn je redis-hashes een puinhoop en houd je je liever aan één conventie. Je hebt een manier nodig om velden in alle hashes te hernoemen.

Redis heeft geen manier om velden binnen een hash te hernoemen. Maar wat nog belangrijker is, er is geen manier om het te doen voor alle hashes die je hebt gemaakt.

Gelukkig is een beetje magie op de commandoregel alles wat nodig is om de rommel op te lossen.


Deze opdracht zal sleutels vinden die overeenkomen met het patroon gebruikers:*, en dan de velden hernoemen

  • creation_date tot creationDate
  • posttypeid naar postTypeId
  • view_count tot viewCount
  • ... enzovoort

Het ontbrekende commando "hrename"

Redis heeft geen hrename-commando, dus we schrijven er eerst een in lua-script. Dit commando hernoemt velden binnen een enkele hash.

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


U moet eerst het script laden. Het commando cat hrename.lua | redis-cli -x script load laadt het script en retourneert een SHA1-identificatie. U kunt deze identifier gebruiken wanneer u het script wilt aanroepen.

Velden hernoemen in meerdere hashes

Nu we een opdracht hebben om een ​​enkele hash te repareren, moeten we deze in een lus uitvoeren voor alle hashes die overeenkomen met een patroon. Het script hash_bulk_rename_fields.sh doet precies dat.

  1. Eerst gebruiken we redis-cli --scan --pattern <pattern> om een ​​lijst met sleutels te krijgen, één sleutel per regel.
  2. Vervolgens geven we de sleutels door grep . De opdracht Redis scan accepteert geen reguliere expressies, dus we filteren standaard met scan en bieden vervolgens een betere reguliere expressie via grep.
  3. Vervolgens voeren we een awk-script uit voor elke sleutel. Dit awk-script is een beetje ingewikkeld, dus we zullen het opsplitsen
  4. Het awk-script heeft een opdrachtsjabloon evalsha <sha1> 1 __key__ <old field name> <new field name>.. . Dit is de opdracht die voor alle sleutels wordt uitgevoerd.
  5. Voor elke overeenkomende sleutel vervangt het awk-commando __key__ met de eigenlijke sleutel
  6. Vervolgens converteren we de tekenreeksopdracht naar het redis-protocolformaat. Dit is het onbewerkte formaat dat redis begrijpt.
  7. Ten slotte pipen we de onbewerkte opdrachten naar redis-cli met behulp van de vlag –pipe. Dit is de meest efficiënte manier om bulkcommando's naar redis te sturen.

Dit script aanpassen

  1. U kunt --pattern wijzigen en het grep-commando om de sleutels van het type hash te selecteren
  2. U kunt cmd_template aanpassen om de velden op te nemen waarvan u de naam wilt wijzigen
  3. Als uw redis-server niet op localhost staat, moet u tweemaal de host, poort en wachtwoord opgeven in het commando, eigenlijk wanneer je redis-cli aanroept.

Zie ook

  • Meerdere toetsen hernoemen met Scan
  • Sleutels verwijderen die overeenkomen met een patroon
  • Vervaldatum instellen op meerdere sleutels
  • Met de GUI van RDBTools voor Redis kunt u een voorbeeld van uw bulkacties bekijken en biedt een krachtige GUI om gegevens in Redis te beheren. Het is een gratis download!

  1. Mongodb opvragen van golang met behulp van de _id die is opgeslagen in een array

  2. Redis:toegang krijgen tot het Redis-logbestand

  3. Bepalen waarom Redis elke minuut of twee een SIGTERM ontvangt

  4. Hoe verwijder ik documenten met Node.js Mongoose?