Supposons que vous vouliez commencer à nommer des champs avec under_scores et qu'un autre membre de l'équipe ait utilisé camelCase. Maintenant, vos hachages redis sont un gâchis, et vous préférez vous en tenir à une convention. Vous avez besoin d'un moyen de renommer les champs dans tous les hachages.
Redis ne permet pas de renommer les champs dans un hachage. Mais plus important encore, il n'y a aucun moyen de le faire pour tous les hachages que vous avez créés.
Heureusement, un peu de magie en ligne de commande suffit pour résoudre le problème.
Cette commande trouvera les clés correspondant au modèle users:*, puis renommera les champs
- creation_date à creationDate
- posttypeid à postTypeId
- view_count à viewCount
- … et ainsi de suite
La commande "hrename" manquante
Redis n'a pas de commande hrename, nous en écrivons donc d'abord une en script lua. Cette commande renommera les champs dans un seul hachage.
evalsha <script-sha1-identifier> 1 <key> <old-field-1> <new-field-1>...
Vous devrez d'abord charger le script. La commande cat hrename.lua | redis-cli -x script load
charge le script et renvoie un identifiant SHA1. Vous pouvez utiliser cet identifiant chaque fois que vous souhaitez appeler le script.
Renommer des champs dans plusieurs hachages
Maintenant que nous avons une commande pour corriger un seul hachage, nous devons l'exécuter en boucle pour tous les hachages qui correspondent à un modèle. Le script hash_bulk_rename_fields.sh
fait exactement cela.
- Tout d'abord, nous utilisons
redis-cli --scan --pattern <pattern>
pour obtenir une liste de clés, une clé par ligne. - Ensuite, nous passons les clés via
grep
. La commande d'analyse Redis n'accepte pas les expressions régulières, nous effectuons donc un filtrage de base avec scan, puis fournissons une meilleure expression régulière via grep. - Nous exécutons ensuite un script awk pour chaque clé. Ce script awk est un peu complexe, nous allons donc le décomposer
- Le script awk a un modèle de commande
evalsha <sha1> 1 __key__ <old field name> <new field name>..
. Il s'agit de la commande qui s'exécutera pour toutes les clés. - Pour chaque clé correspondante, la commande awk remplace
__key__
avec la clé réelle - Ensuite, nous convertissons la commande de chaîne au format de protocole Redis. Il s'agit du format brut que redis comprend.
- Enfin, nous dirigeons les commandes brutes vers redis-cli en utilisant l'indicateur –pipe. C'est le moyen le plus efficace d'envoyer des commandes groupées à redis.
Personnalisation de ce script
- Vous pouvez modifier
--pattern
et la commande grep pour sélectionner les clés de type hash - Vous pouvez personnaliser
cmd_template
pour inclure les champs que vous souhaitez renommer - Si votre serveur Redis n'est pas sur localhost, vous devrez fournir l'hôte, le port et le mot de passe deux fois dans la commande, essentiellement chaque fois que vous appelez redis-cli.
Voir aussi
- Renommer plusieurs clés à l'aide de Scan
- Supprimer les clés correspondant à un modèle
- Définir l'expiration sur plusieurs clés
- L'interface graphique RDBTools pour Redis vous permet de prévisualiser vos actions groupées et fournit une interface graphique puissante pour gérer les données dans Redis. C'est un téléchargement gratuit !