Download - Redis: no solo una caché
Fernando Escolar@fernandoescolar
Alex Casquete@acasquete
¿Qué vamos a ver hoy?
• ¿Qué es Redis?
• Operaciones / Tipos de datos
• Transacciones
• Ejemplo Red Social
Algunos datos
• Redis = REmote DIctionary Server
• La primera release fue en 2009
• La versión más reciente: 2.8.19
• Escrito en C
• Tiene librerías para más de 30 lenguajes de programación
• Una buena documentación
Redis
“Redis es un Sistema de almacenamiento y caché avanzado, que usadatos de tipo clave-valor, open source y con licencia BSD.
Usualmente se le denomina servidor de estructura de datos ya queuna clave puede contener:
strings, hashes, lists, sets, sorted sets, bitmaps y hyperloglogs.”
Redis
• Redis trabaja in-memory pero persiste en disco
• 1 Millón de pequeñas “Key -> String” usan ~ 100 MB de memoria
• Un solo hilo de ejecución – pero la CPU no será un cuello de botella
• Un sistema normal Linux puede enviar 500k requests/segundo
• El límite de almacenamiento es la memoria disponible
• max. 232 keys
Diferencias con Memcached
• Memcached es un “Sistema de cache en memoria distribuido”
• Redis persiste los datos en el disco de forma eventual
• Memcached es un sistema caché LRU (Least Recently Used)
• Redis tiene diferentes tipos de datos y features
• Memcached es multi hilo
• Velocidad similar (en local)
Memcached
Redis
Demo: Consola
Operaciones / Tipos de datos
BASIC
• SET key value [EX seconds] [PX milliseconds] [NX|XX]
• GET key
• DEL key
BASIC
• EXISTS key
• KEYS pattern
• EXPIRE key seconds
• MGET key [key …]
• MSET key value [key value …]
STRINGS
• STRLEN KEY
• APPEND key value
ENTEROS
• INCR key / INCRBY key increment
• DECR key / DECRBY key increment
HASHES
• HSET key field value
• HGET key field
• HGETALL key
• HDEL key field [field …]
LISTAS
• LSET key index value
• LPUSH key value [value …] / RPUSH key value [value …]
• LPOP key / RPOP key
• LRANGE key start stop
• LREM key count value
SETS
• SADD key member [member …]
• SMEMBERS key / SRANDMEMBER key [count]
• SSCAN key cursor [MATCH pattern] [COUNT count]
• SISMEMBER key member
• SPOP key
• SREM key member [member …]
OPERACIONES CON SETS
• SINTER key [key …] / SINTERSTORE destination key [key …]
• SDIFF key [key …] / SDIFFSTORE destination key [key …]
• SUNION key [key …] / SUNIONSTORE destination key [key …]
SORTED SETS
• ZADD key score member [score member …]
• ZSCORE key member
• ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset
• count]
• ZREM key member [member ...]
• ZREMRANGEBYLEX key min max
• ZINCRBY key increment member
HYPERLOGLOG
“Hyperloglog es una técnica aproximada para calcular el número de entradas distintas en un conjunto (cardinalidad). Esto se consigueutilizando poca memoria. Por ejemplo, para conseguir el 99% de
precision, se necesitan solo 16 Kb.”
PUB/SUB
• SUBSCRIBE channel [channel …]
• UNSUBSCRIBE [channel [channel …]]
• PUBLISH channel message
TRANSACCIONES
• MULTI
• EXEC
• DISCARD
TRANSACCIONES
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
HyperLogLog
• PFADD key element [element …]
• PFCOUNT key [key …]
• PFMERGE destkey sourcekey [sourcekey ...]
• Caso de uso: Track Unique Visitors
SCRIPTING
Ejecutar scripts LUA en lado servidor
• EVAL script numkeys key [key ...] arg [arg …]
• SCRIPT LOAD script
• EVALSHA sha1 numkeys key [key ...] arg [arg ...]
CASOS DE USO
• Listados de últimos xxx: LPUSH y LTRIM
• Tablas de top o de rankings: ZADD, ZREVRANGE y ZREVRANGEBYSCORE
• Cálculos de tipo “karma”: ZADD, ZRANK, ZINCRBY
• Contadores usuarios activos: INCR y EXPIRE
• Publicación y suscripción: mediator
• QUEUE’s (colas): BLPOP y LPUSH
• Textos auto-completables: ZADD, ZRANK y ZRANGE
• Almacenar información que caduca: EXPIRE
• …
Demo: Retwis
EN RESUMEN
• Maneja cadenas de texto (o byte arrays)
• 5 tipos de datos:• Keys
• Hashes
• Lists
• Sets
• Sorted Sets
• Pub/Sub
• Operaciones con datos
• Scripts en LUA
• En memoria, pero persiste en forma de snapshots
MÁS INFORMACIÓN
• https://github.com/fernandoescolar/Tokiota.Redis
• http://redis.io/documentation
• https://servicestack.net/
• Redis Bitmapshttp://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/