redis: no solo una caché
TRANSCRIPT
![Page 1: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/1.jpg)
Fernando Escolar@fernandoescolar
Alex Casquete@acasquete
![Page 2: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/2.jpg)
¿Qué vamos a ver hoy?
• ¿Qué es Redis?
• Operaciones / Tipos de datos
• Transacciones
• Ejemplo Red Social
![Page 3: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/3.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/4.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/5.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/6.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/7.jpg)
Memcached
Redis
![Page 8: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/8.jpg)
Demo: Consola
![Page 9: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/9.jpg)
Operaciones / Tipos de datos
![Page 10: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/10.jpg)
BASIC
• SET key value [EX seconds] [PX milliseconds] [NX|XX]
• GET key
• DEL key
![Page 11: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/11.jpg)
BASIC
• EXISTS key
• KEYS pattern
• EXPIRE key seconds
• MGET key [key …]
• MSET key value [key value …]
![Page 12: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/12.jpg)
STRINGS
• STRLEN KEY
• APPEND key value
![Page 13: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/13.jpg)
ENTEROS
• INCR key / INCRBY key increment
• DECR key / DECRBY key increment
![Page 14: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/14.jpg)
HASHES
• HSET key field value
• HGET key field
• HGETALL key
• HDEL key field [field …]
![Page 15: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/15.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/16.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/17.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/18.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/19.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/20.jpg)
PUB/SUB
• SUBSCRIBE channel [channel …]
• UNSUBSCRIBE [channel [channel …]]
• PUBLISH channel message
![Page 21: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/21.jpg)
TRANSACCIONES
• MULTI
• EXEC
• DISCARD
![Page 22: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/22.jpg)
TRANSACCIONES
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
![Page 23: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/23.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/24.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/25.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/26.jpg)
Demo: Retwis
![Page 27: Redis: no solo una caché](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/27.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/28.jpg)
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é](https://reader035.vdocuments.mx/reader035/viewer/2022081506/55a8ed081a28abb32b8b4733/html5/thumbnails/29.jpg)