Cómo utilizar Redis con Python
¡Hola! Una semana más seguimos con Redis y esta vez vamos a aprender a utilizarlo con Python, para en un posterior tutorial ya trabajar con él desde Django que es mi meta final para esta serie de tutoriales 💪.
Para utilizar Redis en nuestros proyectos con Python, lo primero que debemos hacer es instalarlo. Para ello lanzamos el siguiente comando:
pip install redis
Para poder realizar pruebas deberemos tener instalado Redis en nuestro PC. Para este ejemplo yo voy a utilizar Docker y un contenedor de Redis pero podéis instalarlo directamente en vuestra máquina. Si queréis ver más información acerca del proceso, os dejo este enlace.
Conectarnos a Redis desde Python
Si queremos conectarnos a Redis desde Python, solo tenemos que insertar la siguiente línea en nuestro código:
r = redis.Redis(host='127.0.0.1', port=6379, db=0)
En la que deberéis sustituir el host, puerto y db por la vuestra. Si lo habéis hecho siguiendo mis tutoriales anteriores, de esta forma os funcionará.
En el caso de que vuestra bbdd tenga una contraseña o queráis añadir configuración extra, deberéis realizar la conexión con el método StrictRedis de la siguiente forma:
r = redis.StrictRedis(host='127.0.0.1', port=6379, db=0, password=None, socket_timeout=None, connection_pool=None, charset='utf-8', errors='strict', unix_socket_path=None)
Crear y Recuperar datos
Si queremos setear un valor, solo necesitamos utilizar el método set con la clave y el valor:
r.set('foo', 'bar')
Para recuperarlo, utilizaremos el método get pasando la clave por parámetro:
r.get('foo')
Este método nos retornará el valor de la clave en formato de bytes. Si queremos convertirlo en string, podemos utilizar la función decode:
r.get('foo').decode("utf-8")
Añadir un ciclo de vida a nuestros datos
En el caso de que queramos darle un tiempo de vida a nuestras claves, podemos utilizar los parámetros ex para añadir cuantos segundos queramos que existan o px en el caso de querer añadir el tiempo en milisegundos:
r.set('foo', 'bar', ex=10)
En este caso, la clave foo tendrá un tiempo de vida de 10 segundos.
Para ver cuanto tiempo de vida le queda podemos utilizar los métodos ttl para verlo en segundos y pttl para que nos lo muestre en milisegundos:
r.pttl('foo')
Si nos arrepentimos y queremos eliminar el límite de tiempo, utilizaremos el método persist:
r.persist('foo')
Si ahora queremos volver a añadir un tiempo de vida a esta clave, utilizaremos el método setex en el que deberemos pasar la clave, el tiempo de vida y el valor que le queramos dar:
r.setex('foo', 15, 'bar2')
En el caso de querer pasarlo en milisegundos, utilizaremos el método psetex.
Operaciones atómicas
Como ya vimos en anteriores posts, una operación atómica en Redis es un proceso que siempre se realiza en su totalidad y que si no es así, tiene la capacidad de deshacerse.
En el caso de Redis, podemos utilizarlas para crear valores que se incrementen y decrementen en nuestras claves. Para utilizarlos crearemos una clave con un valor numérico y posteriormente lanzaremos las funciones para que se incremente y decremente el valor de esa clave:
r.set('contador', '5')
r.incr('contador')
# Ahora el valor es 6
r.incr('contador')
# Ahora el valor es 7
r.decr('contador')
# Ahora el valor es 6
Si queremos incrementar el valor, utilizaremos el método incr, en caso contrario, usaremos el método decr.
Ahora bien, si lo que queremos es aumentar o disminuir el valor en un número dado por nosotros y no de uno en uno, utilizaremos los métodos incrby y decrby en el que pasaremos la clave y el valor:
r.set('contador', '5')
r.incrby('contador', '3')
# Ahora el valor es 8
r.incrby('contador', '4')
# Ahora el valor es 12
r.decrby('contador', '5')
# Ahora el valor es 7
Conclusiones
Como veis, la transición de Redis desde consola al lenguaje de Python es bastante sencilla, ya que los métodos se llaman iguales que los comandos, solo se puede dudar a la hora de como pasar ciertos parámetros, pero para eso tenemos la doc 😎.
Espero que este post te ayude y como siempre, te recomiendo seguirme en Twitter para estar al tanto de los nuevo contenido. Ahora también puedes seguirme en Instagram donde estoy subiendo tips, tutoriales en vídeo e información sobre herramientas para developers.
Por último os dejo mi guía para aprender a trabajar con APIs donde explico todo el funcionamiento de una API, el protocolo HTTP y veremos como construir una API con arquitectura REST.
Nos leemos 👋.