Redis: no solo una caché

29
Fernando Escolar @fernandoescolar Alex Casquete @acasquete

Transcript of Redis: no solo una caché

Page 1: Redis: no solo una caché

Fernando Escolar@fernandoescolar

Alex Casquete@acasquete

Page 2: Redis: no solo una caché

¿Qué vamos a ver hoy?

• ¿Qué es Redis?

• Operaciones / Tipos de datos

• Transacciones

• Ejemplo Red Social

Page 3: Redis: no solo una caché

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

Page 4: Redis: no solo una caché

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.”

Page 5: Redis: no solo una caché

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

Page 6: Redis: no solo una caché

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)

Page 7: Redis: no solo una caché

Memcached

Redis

Page 8: Redis: no solo una caché

Demo: Consola

Page 9: Redis: no solo una caché

Operaciones / Tipos de datos

Page 10: Redis: no solo una caché

BASIC

• SET key value [EX seconds] [PX milliseconds] [NX|XX]

• GET key

• DEL key

Page 11: Redis: no solo una caché

BASIC

• EXISTS key

• KEYS pattern

• EXPIRE key seconds

• MGET key [key …]

• MSET key value [key value …]

Page 12: Redis: no solo una caché

STRINGS

• STRLEN KEY

• APPEND key value

Page 13: Redis: no solo una caché

ENTEROS

• INCR key / INCRBY key increment

• DECR key / DECRBY key increment

Page 14: Redis: no solo una caché

HASHES

• HSET key field value

• HGET key field

• HGETALL key

• HDEL key field [field …]

Page 15: Redis: no solo una caché

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

Page 16: Redis: no solo una caché

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 …]

Page 17: Redis: no solo una caché

OPERACIONES CON SETS

• SINTER key [key …] / SINTERSTORE destination key [key …]

• SDIFF key [key …] / SDIFFSTORE destination key [key …]

• SUNION key [key …] / SUNIONSTORE destination key [key …]

Page 18: Redis: no solo una caché

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

Page 19: Redis: no solo una caché

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.”

Page 20: Redis: no solo una caché

PUB/SUB

• SUBSCRIBE channel [channel …]

• UNSUBSCRIBE [channel [channel …]]

• PUBLISH channel message

Page 21: Redis: no solo una caché

TRANSACCIONES

• MULTI

• EXEC

• DISCARD

Page 22: Redis: no solo una caché

TRANSACCIONES

WATCH mykey

val = GET mykey

val = val + 1

MULTI

SET mykey $val

EXEC

Page 23: Redis: no solo una caché

HyperLogLog

• PFADD key element [element …]

• PFCOUNT key [key …]

• PFMERGE destkey sourcekey [sourcekey ...]

• Caso de uso: Track Unique Visitors

Page 24: Redis: no solo una caché

SCRIPTING

Ejecutar scripts LUA en lado servidor

• EVAL script numkeys key [key ...] arg [arg …]

• SCRIPT LOAD script

• EVALSHA sha1 numkeys key [key ...] arg [arg ...]

Page 25: Redis: no solo una caché

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

• …

Page 26: Redis: no solo una caché

Demo: Retwis

Page 27: Redis: no solo una caché

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

Page 28: Redis: no solo una caché

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/

Page 29: Redis: no solo una caché