Cacheando y acelerando con Redis, parte II
Publicado 11-09-2014
En esta parte veremos como utilizar Redis desde el shell Bash. No te pierdas todas las partes de la serie sobre Redis: Parte I, Parte II, y Parte III.
Puede parecer algo inútil pero lo haremos en primer lugar porque nos ayudará a comprender mejor como trabaja Redis y en segundo lugar porque seguro que en un futuro acabamos por encontrarle utilidad, y os dejo algunos escenarios o ideas:
- Scripts de administración que necesitan comunicarse entre ellos e incluso entre distintos hosts. ¿Por qué no escribir y leer estados y órdenes en Redis? Quién haya tenido que hacer esto por sockets o por enviando órdenes por SSH está pensado ahora mismo en que no es mala idea.
- Tareas de cron que deben actualizar estados para la aplicación.
- Resultados de operaciones de backup que se muestran más tarde en un interfaz web.
- Etc…
Sin más pasamos a ver cómo se usa desde shell y a hacer un script de ejemplo.
Usando Redis desde Bash
El Bash script es un lenguaje pegamento, es decir, no es un lenguaje de programación propiamente dicho sino que el intérprete es capaz de ejecutar procesos por lotes o scripts. Esto son ficheros de texto plano con comandos y algo de control de flujo básico, del tipo if, then, else
, for
, while
, etc…
Por tanto no vamos a encontrar funciones o drivers para llamar a Redis, lo que vamos a hacer es pegar el comando externo redis-cli
dentro de nuestro script.
Guardando un valor
Probemos esto desde la consola:
Redis ha guardado ese valor en su base de datos en RAM. Comprobémoslo:
Recuperando un valor
Correcto. Lo que hemos hecho es muy sencillo: a través del pipe o tubería (|
) pasamos al cliente de Redis la salida de echo y la acepta como si lo estuviésemos tecleando.
Utilizaremos este comportamiento para integrar Redis dentro de cualquier script.
Un script de ejemplo
No nos vamos a matar, esto no es un curso de bash scripting y además si estás leyendo esto seguramente ya tienes al menos nociones, así que programaremos un sencillo script que guarde y recupere algunos valores.
Con tu editor favorito, crea el fichero prueba-redis.sh
y escribe en él algo así:
1#!/usr/bin/env bash 2 3echo "+-----------------+" 4echo "| PRUEBA DE REDIS |" 5echo "+-----------------+" 6echo 7echo "Hola, bienvenido a esta prueba." 8 9EXEC_COUNT=$(echo "get exec_count"|redis-cli) 10if [[ $EXEC_COUNT -gt 0 ]] 11then 12 echo "Has ejecutado esta prueba ${EXEC_COUNT} veces." 13else 14 echo "Es la primera vez que ejecutas esta prueba." 15fi 16echo "INCR exec_count" | redis-cli 17echo 18 19while [[ 1 ]] 20do 21 echo "MENU DE OPCIONES" 22 echo "1 - Guardar mis datos" 23 echo "2 - Ver mis datos" 24 echo "0 - Salir" 25 echo 26 read -p "Opcion? " OPC 27 case $OPC in 28 1) 29 read -p "Cual es tu nombre? " FIRST_NAME 30 echo "set first_name ${FIRST_NAME}" | redis-cli 31 read -p "Y tu apellido? " LAST_NAME 32 echo "set last_name ${LAST_NAME}" | redis-cli 33 read -p "Y tu edad? " AGE 34 echo "set age ${AGE}" | redis-cli 35 ;; 36 2) 37 FIRST_NAME=$(echo "get first_name" | redis-cli) 38 LAST_NAME=$(echo "get last_name" | redis-cli) 39 AGE=$(echo "get age" | redis-cli) 40 echo 41 echo "Te llamas ${FIRST_NAME} ${LAST_NAME} y tienes ${AGE}." 42 ;; 43 0) 44 echo "Adios" 45 exit 0 46 ;; 47 esac 48 sleep 2 49 echo 50done
No es muy espectacular, pero ¡Está bien para empezar! Juega un poco con él, lo interesante es que si sales y vuelves a entrar se acuerda de los datos, porque están en Redis.