Python, Redis una combinacion estupenda.

Recientemente me dedica a aprender redis, que es redis para los que no tengan una idea.

Que es redis

Es un base de datos NoSQL en memoria, basado en el almacenamiento de llave-valor (key-value), Su nombre es acrónimo de Servidor de DIccionario REmoto, esta bajo la licencia BSD por lo que es considerado software de código abierto. Puede ser usado para una base de datos duradera y persistente.

Redis es sumamente veloz, esto debido a su sencilla estructura ausente de logica relacional y su punto mas importante, la base de datos esta cargada en memoria por ellos sus altos niveles de velocidad.

Los comandos de redis no son complejos, fáciles de aprender en la pagina oficial encuentras la lista de todos los comandos que se pueden utilizar.

Soporta replicación de tipo maestro-esclavo, de esta manera un maestro puede replicar la información en muchos esclavos, y un esclavo puede ser maestro de otro esclavo.

Pagina oficial: http://redis.io/
Codigo fuente: https://github.com/antirez/redis

Tipo de datos

  • Cadenas de caracteres.
  • Listas
  • Sets
  • Sorted sets
  • Hashes



Clientes

Redis tiene mucho librerías con la que podemos interactuar puedes echar un vistazo. http://redis.io/clients


Cliente para python: redis-py

voy a utilizar https://github.com/andymccurdy/redis-py
documentación:  http://redis-py.readthedocs.org/en/latest/


Instalacion

La instalación la hice en debian 7 y python3.3

# aptitude install redis-server
# pip install redis


Utilización de redis en python

Conexión e ingreso a redis
ingresar al cli de redis.
$ redis-cli
redis 127.0.0.1:6379>ping
PONG

conexión desde python
>>> import redis
>>> r = redis.Redis()
>>> r.ping
True

Cadena de caracteres

Esta es quizás la más fácil de entender, simplemente una llave posee un valor común y corriente tipo string:
Formato de la cadena de caracteres primero la llave y después el valor.

SET key valor
GET key valor

redis:
redis 127.0.0.1:6379> SET nombre Jhon
OK
redis 127.0.0.1:6379> SET apellido Doe
OK
redis 127.0.0.1:6379> SET nombre:codigo 123ASDF
OK

redis 127.0.0.1:6379> GET nombre
"Jhon"
redis 127.0.0.1:6379> GET apellido
"Doe"
redis 127.0.0.1:6379> GET nombre:codigo
"123ASDF"

python:
>>> r.set('nombre', 'Jhon')
True
>>> r.set('apellido', 'Doe')
True
>>> r.set('nombre:codigo', '123ASDF')
True
>>> r.get('nombre')
'Jhon'
>>> r.get('nombre')
'Doe'
>>> r.get('nombre:codigo')
123ASDF

Listas

Listas son simplemente listas de cadenas, ordenadas por orden de inserción. Es posible añadir elementos a una lista de Redis empujando nuevos elementos en la cabeza (a la izquierda) o en la cola (a la derecha) de la lista.

redis:
redis 127.0.0.1:6379> RPUSH mylist "uno"
(integer) 1
redis 127.0.0.1:6379> RPUSH mylist "dos"
(integer) 2

redis 127.0.0.1:6379> LRANGE mylist 0 2
1) "uno"
2) "dos"

python: 
>>> r.rpush('list', '1')
1L
>>> r.rpush('list', '2')
2L
>>> r.lrange('list', '0', '2')
['1', '2']

Sets

Son una colección desordenada de cadena de caracteres "strings". Es posible agregar, quitar, y la prueba de la existencia de miembros.
 
Son conjuntos que ordenados o no ordenas, en este pequeño ejemplo solo incluiré los no ordenados.

redis:
redis 127.0.0.1:6379> SADD conjunto 1
(integer) 1
redis 127.0.0.1:6379> SADD conjunto 2
(integer)2redis 127.0.0.1:6379> SMEMBERS conjunto
1) "1"
2) "2"


python:
>>> r.sadd('conjunto', '1')
1
>>> r.sadd('conjunto', '2')
1
>>> r.smembers('conjunto')
set(['1', '2', '23'])


Hashes

Son mapas entre los campos de cadena y valores de la cadena, por lo que son el tipo perfecto de datos para representar los objetos (por ejemplo: Un usuario con una serie de campos como el nombre, apellidos, edad, etc).
  
Los hash de redis son como los diccionarios de python

redis:
redis 127.0.0.1:6379> HSET mihash field1 "Hola"
(integer) 0 
redis 127.0.0.1:6379> HSET mihash field2 "Mundo"
(integer) 0
redis 127.0.0.1:6379> HGET mihash field1
"Hola"
redis 127.0.0.1:6379> HGETALL mihash
1) "Hola"
2) "Mundo"


python:
>>> r.hset('mihash', 'field1', 'hola')
1L
>>> r.hset('mihash', 'field2', 'mundo')
1L
>>> r.hget('mihash', 'field1')
'hola'
>>> r.hgetall('mihash')
{'field2': 'mundo', 'field1': 'hola'}

Casos de exito

Es un clon de reddit, escrito por el autor de redis
http://lamernews.com/

YouPorn
http://mundogeek.net/archivos/2012/02/16/el-porno-prefiere-redis/http://mundogeek.net/archivos/2012/02/16/el-porno-prefiere-redis/

Quien utiliza redis
http://redis.io/topics/whos-using-redis


Fuentes:

http://codehero.co/como-instalar-configurar-y-usar-redis/
https://es.wikipedia.org/wiki/Redis
http://redis.io/

 

Entradas más populares de este blog

Convertir disco virtualbox.ova a qemu.qcow2

Mi cambio de asterisk a FreeSWITCH

disqus

comments powered by Disqus