Lad os sige, at du vil have, at du startede med at navngive felter med under_scores, og et andet teammedlem brugte camelCase. Nu er dine redis-hashes et rod, og du vil hellere holde dig til én konvention. Du har brug for en måde at omdøbe felter på tværs af alle hashes.
Redis har ikke en måde at omdøbe felter i en hash. Men endnu vigtigere, der er ingen måde at gøre det på for alle de hashes, du har oprettet.
Heldigvis er lidt kommandolinjemagi alt, der skal til for at ordne rodet.
Denne kommando finder nøgler, der matcher mønsterbrugerne:*, og omdøber derefter felter
- creation_date to creationDate
- posttypeid til postTypeId
- view_count til viewCount
- ... og så videre
Den manglende "hrename"-kommando
Redis har ikke en hrename-kommando, så vi skriver først en i lua-script. Denne kommando vil omdøbe felter inden for en enkelt hash.
evalsha <script-sha1-identifier> 1 <key> <old-field-1> <new-field-1>...
Du skal først indlæse scriptet. Kommandoen cat hrename.lua | redis-cli -x script load
indlæser scriptet og returnerer et SHA1-id. Du kan bruge denne identifikator, når du vil starte scriptet.
Omdøbning af felter i flere hashes
Nu hvor vi har en kommando til at rette en enkelt hash, skal vi køre den i en løkke for alle de hashes, der matcher et mønster. Scriptet hash_bulk_rename_fields.sh
gør netop det.
- For det første bruger vi
redis-cli --scan --pattern <pattern>
for at få en liste over nøgler, én tast pr. linje. - Dernæst sender vi nøglerne gennem
grep
. Redis scan-kommandoen accepterer ikke regulære udtryk, så vi udfører grundlæggende filtrering med scan og giver derefter et bedre regulært udtryk via grep. - Vi kører derefter et awk-script for hver nøgle. Dette awk-script er lidt komplekst, så vi vil opdele det
- Awk-scriptet har en kommandoskabelon
evalsha <sha1> 1 __key__ <old field name> <new field name>..
. Dette er kommandoen, der kører for alle nøgler. - For hver matchende nøgle erstatter awk-kommandoen
__key__
med den faktiske nøgle - Dernæst konverterer vi strengkommandoen til redis-protokolformat. Dette er det rå format, som redis forstår.
- Til sidst sender vi de rå kommandoer til redis-cli ved hjælp af –pipe-flaget. Dette er den mest effektive måde at sende massekommandoer til redis.
Tilpasning af dette script
- Du kan ændre
--pattern
og grep-kommandoen for at vælge de nøgler, der er af typen hash - Du kan tilpasse
cmd_template
for at inkludere de felter, du vil omdøbe - Hvis din redis-server ikke er på localhost, skal du angive værten, porten og adgangskoden to gange i kommandoen, stort set hver gang du kalder redis-cli.
Se også
- Omdøb flere taster ved hjælp af Scan
- Slet nøgler, der matcher et mønster
- Indstil udløb til flere nøgler
- RDBTools GUI til Redis giver dig mulighed for at forhåndsvise dine bulkhandlinger og giver en kraftfuld GUI til at administrere data i Redis. Det er en gratis download!