3. Conociendo REDIS
• Servidor de base de datos NoSQL de clave-valor (key-value) en
memoria RAM.
• Estructura de datos: Strings, list, sets, set order, hashes.
• Permite expiración de datos.
• Replicación Maestro-Esclavo (master-slave)
• Conexión TCP/IP y sockets (puerto por defecto 6379).
• Evaluación de código LUA.
• Servidor Mono-hilo, no aprovecha los multi-core.
4.
5. Instalación
Antes de instalar redis, hay un par de requisitos previos que hay que
descargar para iniciar la instalación.
~$ sudo apt-get update
Una vez finalizado, descargamos el metapaquete build-essential, el
cual nos ayudará a instalar redis.
~$ sudo apt-get install build-essential
Finalmente, necesitamos instalar el tcl.
~$ sudo apt-get install tcl8.5
6. Instalación
Con todos los requisitos descargados, procedemos a instalar redis.
Descargamos desde el tarball de Google, la versión 2.4.16
~$ wget http://redis.googlecode.com/files/redis-2.4.16.tar.gz
Descomprimimos y cambiamos de directorio.
~$ tar xzf redis-2.4.16.tar.gz
~$ cd redis-2.4.16
Procedemos a ejecutar make
~$ make
7. Instalación
Ejecuta el make test, como recomienda:
~$ make test
Terminamos ejecutando make install para instalar redis en el Sistema.
~$ sudo make install
Una vez instalado, redis viene con un scripts que debemos ejecutar para
que redis corra en background (segundo plano)
~$ cd utils
Desde esta carpeta (utils/) ejecutamos el script
~$ sudo ./install_server.sh
Nos va pedir ingresar el puerto con que queremos trabajar, puedes dejar los
valores por defecto (puerto 6379).
8. Instalación
Iniciando el servicio de redis
~$ sudo service redis_6379 start
Deteniendo el servicio de redis
~$ sudo service redis_6379 stop
Accediendo a la base de datos redis.
~$ redis-cli
Y te aparecerá el prompt de la consola de redis
redis 127.0.0.1:6379>
Para hacer que redis se ejecute automáticamente al iniciar el Sistema Operativo.
~$ sudo update-rc.d redis_6379 defaults
9.
10. Strings en Redis
Los Strings pueden almacenar hasta 512 MB y son almacenados en formato binario
por lo que pueden almacenar desde texto hasta imágenes JPG.
Una manera simple de crear un string, con el comando SET
redis 127.0.0.1:6379> set mi_valor “contenido_valor”
Los strings pueden almacenar valores extensos y la llave no necesariamente tiene
que ser una palabra:
redis 127.0.0.1:6379> set user:gchacaltana "job: developer, name:
Gonzalo, surnames: Chacaltana”
11. Strings en Redis
Obteniendo el valor de un string, con el comando GET
redis 127.0.0.1:6379> get mi_valor
redis 127.0.0.1:6379> get user:gchacaltana
Para agregar un texto a la variable (llave) puede utilizar el comando APPEND
redis 127.0.0.1:6379> set saludo "Hola"
redis 127.0.0.1:6379> append saludo " mundo"
redis 127.0.0.1:6379> get saludo
“Hola mundo”
12. List en Redis
Las listas en Redis pueden almacenar hasta 4 billones de elementos y el acceso al
primer y último elemento de la lista es mucho mas rápido que el resto de elementos.
Para crear una lista en redis, debemos utilizar uno de los siguientes comandos:
• LPUSH que agrega el elemento a la izquierda de la lista.
• RPUSH que agrega el elemento a la derecha o cola (tail) de la lista.
redis 127.0.0.1:6379> lpush lenguajes "Python”
redis 127.0.0.1:6379> rpush lenguajes "PHP”
redis 127.0.0.1:6379> rpush lenguajes “Haskell”
redis 127.0.0.1:6379> rpush lenguajes “Ruby”
redis 127.0.0.1:6379> rpush lenguajes “Clojure”
redis 127.0.0.1:6379> rpush lenguajes “Go”
13. List en Redis
Obteniendo valores de la lista, con el comando LRANGE
redis 127.0.0.1:6379> lrange lenguajes 0 6
1) "Python"
2) "PHP"
3) "Haskell"
4) "Clojure"
5) "Go"
6) "Ruby"
14. List en Redis
Para eliminar los elementos de una lista, usamos el comando LTRIM.
redis 127.0.0.1:6379> ltrim lenguajes 0 2
Lo que hace el comando es eliminar todos los elementos de la lista
que no se encuentren entre los indices 0 y 2.
redis 127.0.0.1:6379> lrange lenguajes 0 5
1) "Python"
2) "PHP"
3) "Haskell"
15. Sets en Redis
Los sets en Redis (conjuntos),son una colección de cadenas desordenadas. Una
propiedad de este tipo de variable es que no permite repetir un elemento, por
ejemplo cuando deseamos guardar las IPS que se conectan a nuestra aplicación,
con este tipo de variable nos aseguramos que la IP no se repita en los Sets Redis.
Para agregar un elemento se usa el comando SADD.
redis 127.0.0.1:6379> sadd vocales a
También podemos enviarle más de un valor.
redis 127.0.0.1:6379> sadd vocales e i o u
16. Sets en Redis
Para mostrar los elementos del set redis, usamos el comando SMEMBERS.
redis 127.0.0.1:6379> smembers vocales
1) "o"
2) "i"
3) "e"
4) "a"
5) "u"
17. Sets en Redis
Para obtener los elementos repetidos de DOS SETS Redis, usamos el comando
SINTER.
redis 127.0.0.1:6379> sadd abecedario a b c d e
(integer) 5
redis 127.0.0.1:6379> sinter vocales abecedario
1) "e"
2) "a“
Retorna un sets con los valores repetidos.
El comando SINTER, puede recibir mas de 2 sets separados por espacios.
18. Sets en Redis
Para obtener un elemento al azar (random) de un SETS Redis, y a su vez que sea
eliminado, usamos el comando SPOP.
redis 127.0.0.1:6379> spop abecedario
"c"
redis 127.0.0.1:6379> smembers abecedario
1) "d"
2) "e"
3) "a"
4) "b"
19. Hashes en Redis
Los hash (hashes) son variables para representar objetos, por lo que almacena un conjunto de valores
en forma de columnas.
Con el comando HMSET, creamos un registro de datos
redis 127.0.0.1:6379> hmset user:1000 username gchacaltana password
mi_clave_secreta twitter @gchacaltanab
Con el comando HGETALL, obtenemos el valor completo de un registro.
redis 127.0.0.1:6379> hgetall user:1000
1) "username"
2) "gchacaltana"
3) "password"
4) "mi_clave_secreta"
5) "twitter"
6) "@gchacaltanab"
20. Hashes en Redis
Con el comando HSET, modificamos un valor de un campo de un registro.
redis 127.0.0.1:6379> hset user:1000 password 123456
redis 127.0.0.1:6379> hgetall user:1000
1) "username"
2) "gchacaltana"
3) "password"
4) "123456"
5) "twitter"
6) "@gchacaltanab"
21. Expiración de datos
Redis no solo es utilizado para el almacenamiento de datos, también es muy
utilizado para la expiración de datos.
Por ejemplo, creamos un string con un “valor secreto”
redis 127.0.0.1:6379> set information "secret"
Y le asignamos un tiempo de expiración de 45 segundos
redis 127.0.0.1:6379> expire information 45
Para poder visualizar cuanto tiempo le queda, usamos el comando ttl.
redis 127.0.0.1:6379> ttl information
(integer) 27
22. Incrementales
Incrementar en 1 el valor de una llave (solo si su valor es un dato
numerico - integer), usando el comando INCR
redis 127.0.0.1:6379> set edad 20
redis 127.0.0.1:6379> incr edad
(integer) 21
redis 127.0.0.1:6379> get edad
"21"
Incrementando en “X” un valor, con el comando INCRBY
redis 127.0.0.1:6379> incrby edad 8
(integer) 29
23. Decrementales
Restar en 1 el valor de una llave (solo si su valor es un dato
numerico - integer), usando el comando DECR
redis 127.0.0.1:6379> decr edad
(integer) 28
Restando en “X” un valor, con el comando DECRBY
redis 127.0.0.1:6379> decrby edad 8
(integer) 20
24. Otros comandos
Obteniendo la longitud de un string, con el comando STRLEN.
redis 127.0.0.1:6379> set saludo "Hola mundo"
OK
redis 127.0.0.1:6379> strlen saludo
(integer) 10
Obteniendo parte de un string, con el comando GETRANGE
redis 127.0.0.1:6379> getrange saludo 0 5
"Hola m"