sql >> Databasteknik >  >> NoSQL >> Redis

Hur man byter namn på fält i Hash för flera nycklar i Redis

Låt oss säga att du vill att du började namnge fält med under_scores, och en annan teammedlem använde camelCase. Nu är dina redis-haschar en enda röra, och du skulle hellre hålla dig till en konvention. Du behöver ett sätt att byta namn på fält över alla hash.

Redis har inte ett sätt att byta namn på fält i en hash. Men ännu viktigare, det finns inget sätt att göra det för alla hash som du har skapat.

Lyckligtvis är lite kommandoradsmagi allt som behövs för att fixa röran.


Det här kommandot hittar nycklar som matchar mönsteranvändarna:* och byter sedan namn på fält

  • creation_date to creationDate
  • posttypeid till postTypeId
  • visningsantal till antal visningar
  • ... och så vidare

Kommandot “hrename” som saknas

Redis har inget hrename-kommando, så vi skriver först ett i lua-skript. Detta kommando kommer att byta namn på fält inom en enda hash.

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


Du måste först ladda skriptet. Kommandot cat hrename.lua | redis-cli -x script load laddar skriptet och returnerar en SHA1-identifierare. Du kan använda denna identifierare när du vill anropa skriptet.

Byta namn på fält i flera hash

Nu när vi har ett kommando för att fixa en enda hash måste vi köra den i en loop för alla hash som matchar ett mönster. Skriptet hash_bulk_rename_fields.sh gör just det.

  1. Först använder vi redis-cli --scan --pattern <pattern> för att få en lista med nycklar, en nyckel per rad.
  2. Närnäst skickar vi nycklarna genom grep . Redis scan-kommandot accepterar inte reguljära uttryck, så vi gör grundläggande filtrering med scan och ger sedan ett bättre reguljärt uttryck via grep.
  3. Vi kör sedan ett awk-skript för varje nyckel. Det här awk-skriptet är lite komplicerat, så vi kommer att bryta ner det
  4. awk-skriptet har en kommandomall evalsha <sha1> 1 __key__ <old field name> <new field name>.. . Detta är kommandot som körs för alla nycklar.
  5. För varje matchande nyckel ersätter kommandot awk __key__ med den faktiska nyckeln
  6. Närnäst konverterar vi strängkommandot till redis-protokollformat. Det här är råformatet som redis förstår.
  7. Slutligen skickar vi råkommandona till redis-cli med hjälp av –pipe-flaggan. Detta är det mest effektiva sättet att skicka bulkkommandon till redis.

Anpassa detta skript

  1. Du kan ändra --pattern och kommandot grep för att välja nycklar som är av typen hash
  2. Du kan anpassa cmd_template för att inkludera fälten du vill byta namn på
  3. Om din redis-server inte finns på localhost måste du ange värden, porten och lösenordet två gånger i kommandot, i princip när du anropar redis-cli.

Se även

  • Byt namn på flera nycklar med Scan
  • Ta bort nycklar som matchar ett mönster
  • Ange utgångsdatum till flera nycklar
  • RDBTools GUI för Redis låter dig förhandsgranska dina bulkåtgärder och tillhandahåller ett kraftfullt GUI för att hantera data i Redis. Det är en gratis nedladdning!

  1. Hur man rensar konsolen i MongoDB

  2. mongoexport JSON-analysfel

  3. redis lua script kontra enstaka samtal

  4. Importera mer än 1 json-fil med mongoimport