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
- Ademas se puede utilizar para mensajes de PUB/SUB
- Script de lua
- Para django como cache. https://django-redis.readthedocs.org/en/latest/
Clientes
Redis tiene mucho librerías con la que podemos interactuar puedes echar un vistazo. http://redis.io/clientsCliente para python: redis-py
voy a utilizar https://github.com/andymccurdy/redis-pydocumentació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 redisingresar 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 redishttp://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/