sql >> Base de Datos >  >> NoSQL >> Redis

Cómo cambiar el nombre de los campos en hash para varias claves en Redis

Supongamos que desea comenzar a nombrar campos con guiones bajos y otro miembro del equipo usó camelCase. Ahora tus redis hash son un desastre y prefieres apegarte a una convención. Necesita una forma de cambiar el nombre de los campos en todos los hash.

Redis no tiene una forma de cambiar el nombre de los campos dentro de un hash. Pero lo que es más importante, no hay forma de hacerlo con todos los hashes que ha creado.

Afortunadamente, un poco de magia de la línea de comandos es todo lo que se necesita para solucionar el problema.


Este comando encontrará claves que coincidan con el patrón usuarios:*, y luego cambiará el nombre de los campos

  • fecha_de_creación a fecha_de_creación
  • posttypeid a postTypeId
  • view_count a viewCount
  • ... y así sucesivamente

El comando "hrename" faltante

Redis no tiene un comando hrename, por lo que primero escribimos uno en script lua. Este comando cambiará el nombre de los campos dentro de un solo hash.

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


Primero deberá cargar el script. El comando cat hrename.lua | redis-cli -x script load carga el script y devuelve un identificador SHA1. Puede utilizar este identificador siempre que desee invocar el script.

Renombrar campos en múltiples hashes

Ahora que tenemos un comando para corregir un solo hash, debemos ejecutarlo en un bucle para todos los hash que coincidan con un patrón. El script hash_bulk_rename_fields.sh hace precisamente eso.

  1. Primero, usamos redis-cli --scan --pattern <pattern> para obtener una lista de claves, una clave por línea.
  2. Luego, pasamos las claves a través de grep . El comando de escaneo de Redis no acepta expresiones regulares, por lo que hacemos un filtrado básico con escaneo y luego proporcionamos una mejor expresión regular a través de grep.
  3. Luego ejecutamos un script awk para cada clave. Este script awk es un poco complejo, por lo que lo desglosaremos
  4. El script awk tiene una plantilla de comando evalsha <sha1> 1 __key__ <old field name> <new field name>.. . Este es el comando que se ejecutará para todas las claves.
  5. Para cada clave coincidente, el comando awk reemplaza a __key__ con la clave real
  6. A continuación, convertimos el comando de cadena al formato del protocolo redis. Este es el formato sin formato que entiende redis.
  7. Finalmente, canalizamos los comandos sin procesar a redis-cli usando el indicador –pipe. Esta es la forma más eficiente de enviar comandos masivos a redis.

Personalizar este script

  1. Puede cambiar --pattern y el comando grep para seleccionar las claves que son de tipo hash
  2. Puede personalizar cmd_template para incluir los campos que desea cambiar de nombre
  3. Si su servidor redis no está en localhost, deberá proporcionar el host, el puerto y la contraseña dos veces en el comando, básicamente cada vez que llamas a redis-cli.

Ver también

  • Cambie el nombre de varias teclas mediante el escaneo
  • Eliminar teclas que coincidan con un patrón
  • Establecer caducidad en varias claves
  • La GUI de RDBTools para Redis le permite obtener una vista previa de sus acciones masivas y proporciona una GUI poderosa para administrar datos en Redis. ¡Es una descarga gratuita!