SlideShare ist ein Scribd-Unternehmen logo
1 von 62
Downloaden Sie, um offline zu lesen
Introducción y casos de uso
      @betabeers – Barcelona
        17 de enero 2012
¿Quién soy?
               Ronny López @ronnylt
              Desarrollador @pricebets
Descubrí Redis cuando una consulta como esta hacia que una
página demorara +15 segundos en cargar:

SELECT value
  FROM odds
  INNER JOIN outcomes ON ...
  INNER JOIN bets      ON ...
  INNER JOIN markets ON ...
  ...
WHERE ... ORDER BY ...
Antes de continuar...
¿Qué hay de malo en los
sistemas tradicionales de
     BD relacionales?

     Nada...
Pero...

• Hay tareas que no necesitan tanta complejidad
• El modelo relacional actual es difícil de escalar
  horizontalmente
• No se pueden modelar problemas comunes lo
  suficientemente bien
¿Qué es Redis?
• Remote dictionary server
• Motor de almacenamiento clave-valor avanzado,
  rápido y persistente
• Servidor de estructuras de datos
• NoSQL (Not-only SQL)
• Open source
¿Quién está detrás de
          Redis?
• Creado por Salvatore Sanfilippo @antirez
• Release inicial en marzo del 2009
• Actualmente el desarrollo es patrocinado por
  VMWare
• Comunidad activa y amigable
¿Quién usa Redis?


• Usado hoy en el mundo real por grandes y
  pequeñas empresas
• Resolviendo grandes y pequeños problemas
¿Quién usa Redis?




Y muchos más...

     http://redis.io/topics/whos-using-redis
¿Para qué lo usan?
• github.com: motor de almacenamiento clave/valor, cola de trabajos
   (resque)

• guardian.co.uk: servidor de estructuras de datos persistente
• disqus.com: sistema estádistico desarrollado sobre Redis
• stackoverflow.com: capa de cache para toda su red
• flickr.com: lista de trabajos
• pricebets.es: almacenamiento primario (conjuntos, listas, hashes, etc...),
   routing, cache, sessions
Características
          principales
• Escrito en C
• Muy pocas dependencias
• Super rápido
• Single-threaded
• Clientes disponibles para varios lenguajes
Características
          principales

• Alto rendimiento en escritura y lectura
• Soporte de operaciones atómicas
• Soporte de transacciones
Características
            Simplicidad

• Fácil instalación
• Curva de aprendizaje relativamente baja
• Lenguage de comandos fácil de utilizar y aprender
Características
              Previsibilidad
• La memoria es rápida, y permite a Redis tener un
    redimiento muy fiable
• Operaciones sobre datasets de 10 mil claves tendrán
    el mismo rendimiento que sobre datasets de 50
    millones de claves
•    La complejidad algorítmica de todos los comandos
    está documentada
Características
              Confiabilidad

• Todos los datos residen en memoria, y son persistidos
  a disco eventualmente (snapshots, append-only log)
• Replication system (master-slave) , pueden configurarse
  múltiples esclavos. Un esclavo puede ser el master de
  otro esclavo
Características
               Persistencia
• RDB, Point-in-time snapshots en intervalos
  configurados
• AOF (append-only file) cada operación de
  escritura
• Es posible combinar RDB y AOF en la misma
  instancia
• Se puede deshabilitar la persistencia del todo
Características
           Versatilidad

• Adaptable a varios tipos de aplicaciones
• Modelado de los datos a partir de estructuras de
  datos como listas, conjuntos, conjuntos ordenados
  y hashes
Tipos de datos

• Redis NO es simplemente un motor de
  almacenamiento clave-valor
• Es un servidor de estructuras de datos que incluye
  varios tipos de datos predefinidos (strings, lists,
  sets, sorted sets, hashes)
Claves
• Puede usarse cualquier cadena de caracteres como
  clave
• Es recomendable tener organizadas las claves en
  namespaces (keyspaces) de la forma:
   object-type:id:field
  Ejemplo:
  user:123:password
  user:456:friends
Claves

• NO es recomendable que las claves sean demasiado
  grandes (memoria, localización en el keyspace)
• Tampoco es recomendable que las claves sean
  demasiado cortas por cuestiones de legibilidad

  Ejemplo: u:123:pw
Tipos de datos
               Strings

• Es el tipo de dato más simple
• Si solamente usa este tipo de dato es similar a usar
  un servidor memcached pero con persistencia
Operaciones con
            Strings
$ redis-cli SET mykey “binary-safe string”
OK
$redis-cli GET mykey
binary-safe string
Operaciones
                 Strings
• Comandos SET/GET para escribir/leer
• Los valores pueden ser cualquier string no mayor
  que 1 GB
• Si necesita almacenar algo más grande, Redis is NOT
  for you ;)
Operaciones atómicas
         Strings
Atomic increment
$ redis-cli SET counter 100
OK
$ redis-cli INCR counter
(integer) 101
$ redis-cli INCR counter
(integer) 102
$ redis-cli INCRBY counter 10
(integer) 112
¿Por qué atómico?


Aún cuando hayan varios clientes ejecuntando
operaciones sobre la misma clave, no se va a incurrir
en una condición de carrera (race condition)
Otras operaciones
              Strings
• APPEND, GETRANGE, STRLEN, ...
• MSET, MGET, ...
• SETNX, MSETNX, GETSET, ...

  http://redis.io/commands#string
Tipos de datos
               Lists

• Son simplemente una secuencia de elementos
  (strings) ordenados
• Son implementadas como listas enlazadas
Tipos de datos
                Lists

• Listas doblemente enlazadas garantizan la inserción
  en cualquier extremo en un tiempo constante
  O(1)
• Con estas caterísticas también puede modelarse
  una “cola”
Operaciones
              Lists
• LPUSH agrega un elemento en el extremo
  izquierdo de la lista
• RPUSH en el extremo derecho
• LRANGE extrae elementos de la lista en cierto
  rango
Operaciones
             Lists
• LPUSH, RPUSH, LPOP, RPOP, ...
• LINDEX, LINSERT, LLEN, ...
• LTRIM, LREM, ...
  http://redis.io/commands#list
Variantes “blocking”

• BLPOP, BRPOP, BRPOPLPUSH
• Bloquean la conexión (del cliente) cuando no hay
  elementos en la lista
• Ideal para implementar colas de trabajos/mensajes
Operaciones
               Lists
  $ redis-cli RPUSH messages "Hola, ¿qué
  tal?"
OK
$ redis-cli RPUSH messages "Bien, gracias"
OK
$ redis-cli RPUSH messages "Muy grande Redis"
OK
$ redis-cli LRANGE messages 0 2
1. Hola, ¿qué tal?
2. Bien, gracias
3. Muy grande Redis
Usos de las listas

• Utilice listas cada vez que requiera acceder a los
  datos en el mismo orden en que se agregan
• Ideal para casos en los que se requiere un ORDER
  BY de SQL
• Escalable a millones de elementos manteniendo el
  mismo rendimiento
Ejemplos de uso de las
             listas
• Mantener un listado cronológico de los comentarios
  publicados en un blog
• Es posible paginar usando LRANGE de forma trivial
  $ redis-cli RPOP post:123:comments 456
  $ redis-cli RPOP post:123:comments 789
  $ redis-cli LRANGE post:123:comments 50 60
Tipos de datos
                Sets
• Colección NO–ordenada de datos (conjuntos)
• Permite operaciones típicas sobre conjuntos como
  unión, intersección, diferencia, etc...
• Estas operaciones son difíciles de implementar en
  un modelo relacional
Ejemplos
                 Sets
  $ redis-cli SADD user:123:friends 456
(integer) 1
$ redis-cli SADD user:123:friends 789
(integer) 1
$ redis-cli SADD user:123:friends 123
(integer) 1
$ redis-cli SMEMBERS user:123:friends
1. 123
2. 456
3. 789

$ redis-cli SISMEMBER user:123:friends 789
(integer) 1
Ejemplos
                 Sets
 Etiquetado de noticias

  $ redis-cli SADD news:123:tags 1
(integer) 1
$ redis-cli SADD tags:1:objects 123
(integer) 1

Obtener todos los tags de una noticia es
trivial

$ redis-cli SMEMBERS news:123:tags
Operaciones
                Sets
• SADD, SREM, SCARD, SMEMBERS, SISMEMBER, ...
• SUNION, SDIFF, SINTER, ...
• SPOP, SRAND, .... O(1)
  http://redis.io/commands#set
Tipos de datos
             Sorted Sets

• Un conjunto ordenado es un conjunto donde a
  cada elemento se le asocia una puntuación (score)
• Este valor (score) determina el orden de los
  elementos dentro del conjunto
Tipos de datos
               Sorted Sets
• ZADD es usado para agregar nuevos elementos o para
  actualizar el score de uno ya existente
  $ redis-cli ZADD top-sites: 4 “pricebets”
  (integer) 1
  $ redis-cli ZADD top-sites: 6 “betabeers”
  (integer) 1

  $ redis-cli ZRANGE top-sites 0 -1
  1. betabeers
  2. pricebets
Operaciones
               Sorted Sets

• ZADD, ZREM, ZCARD, ZCOUNT, ZINCR, ...
• ZSCORE, ZINCRBY, ZRANK, ...
• ZCOUNT, ....
  http://redis.io/commands#sorted_set
Tipos de datos
                 Hashes

• Permiten que objetos compuestos se almacenen en una
  clave específica
• Tipo de dato ideal para almacenar objetos complejos
  en Redis, usando los atributos del objeto como claves
  del hash
Operaciones
           Hashes
$ redis-cli HSET event:1 name betabeers
$ redis-cli HSET event:1 date 2012-01-17
$ redis-cli HSET event:1 where Barcelona

$ redis-cli HGETALL event:1
1) name
2) betabeers
3) date
4) 2012-01-17
5) where
6) Barcelona
Operaciones
                 Hashes
• HSET, HGET, HDEL, HEXIST, ...
• HKEYS, HGETALL, HVALS, ...
• HMGET, HMSET, ...

  http://redis.io/commands#hash
Casos de uso
Contadores
Contadores

• Gran cantidad de escrituras/lecturas
• Datos valiosos, pero NO críticos
• Insertar una fila en MySQL o actualizar un
  contador en cada petición será sin dudas difícil de
  escalar
Contadores

$ redis-cli INCR active:sports:spain
$ redis-cli INCR active:sports:italy
$ redis-cli GET active:sports:spain

$ redis-cli GETSET active:sports:spain 0
Casos de uso
        Presencia
        ¿Quién está online?
¿Cuáles de mis amigos están online?
Presencia
• Mantener en un conjunto los usuarios que se
  han detectado online en cada minuto

  $ redis-cli SADD online:15:01 123
  $ redis-cli SADD online:15:01 456

  $ redis-cli SADD online:15:02 123
Presencia
• El conjunto de usuarios online se puede
  obtener de la UNION de los conjuntos
  relativos a los últimos ¿5? minutos.

  A las 15:05
  $ redis-cli SUNION online:15:01
  online:15:02 online:15:03 online:
  15:04 online:15:05
Presencia
• El conjunto de “amigos” online es otra
  operación sobre conjuntos

  $ redis-cli SUNION online:15:01
  online:15:02 online:15:03 online:
  15:04 online:15:05 user:123:friends

• Puede almacenarse en otra clave:
  $ redis-cli SUNIONSTORE
  friends:online:123 online:15:01
  online:15:02 online:15:03 online:
  15:04 online:15:05 user:123:friends
Casos de uso
Tabla de posiciones
Tabla de posiciones

• Se necesita listar elementos ordenados por una
  puntuación
• Las puntuaciones se actualizan en tiempo real
• Consultas lentas por naturaleza
  SELECT * FROM ... WHERE ... ORDER BY ... LIMIT 10
Tabla de posiciones

• Mantener un conjunto ordenado (sorted set) con los
  elementos y su score
  $ redis-cli ZADD popular:sports 10 football
  $ redis-cli ZADD popular:sports 6 basketball
  $ redis-cli ZADD popular:sports 12 football
  $ redis-cli ZREVRANGE popular:sports 0 9
Casos de uso
URL Routing
URL Routing
• Convertir alias de URL a paths internos de la
  aplicación

  Ejemplo:

  http://www.apuestas.com/futbol
  => /sport/1

  http://www.apuestas.com/futbol/espana/copa-del-rey
  => /competition/3120
URL Routing

• Convertir paths internos a friendly URLs
  Ejemplo:
   /sport/1
  => http://www.apuestas.com/futbol

  /competition/3120
  http://www.apuestas.com/futbol/espana/copa-del-rey
URL Routing
• Mantener un hash con el routing y otro con los alias
  $ redis-cli HSET routing /futbol /sport/1
  $ redis-cli HSET alias /sport/1 /futbol



• Tiempo constante O(1) para cualquier número de
  rutas/alias
Otras características...


• Pipelining
• Transactions
• Pub/Sub
¿Qué se espera para
       próximas vesiones?

• Scripting (con LUA) (Redis 2.6)
• High resolution expires (Redis 2.6)
• Mejoras en el rendimiento de la escritura/lectura
  de grandes objetos (Redis 2.6)
• Redis Cluster (Redis 3.0)
Algunos consejos


• Instancias de Redis en 64 bits consumen más RAM
• No usar el comando KEYS en producción
• Comando MONITOR para observar y monitorear
Benchmarks
                                 Processor 2.2 GHz Intel Core i7
redis-benchmark -q -n 100000     Memory 8 GB 1333 MHz DDR3

PING (inline): 108459.87 requests per second
PING: 89766.61 requests per second
MSET (10 keys): 48053.82 requests per second
SET: 80064.05 requests per second
GET: 87108.02 requests per second
INCR: 82644.62 requests per second
LPUSH: 82169.27 requests per second
LPOP: 78802.20 requests per second
SADD: 71890.73 requests per second
SPOP: 93283.58 requests per second
LPUSH (again, in order to bench LRANGE): 86880.97 requests per second
LRANGE (first 100 elements): 64061.50 requests per second
LRANGE (first 300 elements): 40064.10 requests per second
LRANGE (first 450 elements): 30478.51 requests per second
LRANGE (first 600 elements): 25873.22 requests per second
Muchas gracias...

$ redis-cli HGETALL pricebets
1.   Buscamos
2.   Programadores
3.   PHP
4.   jobs@pricebets.com

Weitere ähnliche Inhalte

Was ist angesagt?

Caching solutions with Redis
Caching solutions   with RedisCaching solutions   with Redis
Caching solutions with RedisGeorge Platon
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Andrei Amador
 
Apache Spark - Introduccion a RDDs
Apache Spark - Introduccion a RDDsApache Spark - Introduccion a RDDs
Apache Spark - Introduccion a RDDsDavid Przybilla
 
Redis overview for Software Architecture Forum
Redis overview for Software Architecture ForumRedis overview for Software Architecture Forum
Redis overview for Software Architecture ForumChristopher Spring
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to RedisArnab Mitra
 
Bases de Datos NoSQL
Bases de Datos NoSQLBases de Datos NoSQL
Bases de Datos NoSQLIsabel Gómez
 
Sql vs NoSQL
Sql vs NoSQLSql vs NoSQL
Sql vs NoSQLRTigger
 
Deep Dive into Cassandra
Deep Dive into CassandraDeep Dive into Cassandra
Deep Dive into CassandraBrent Theisen
 
Parquet and AVRO
Parquet and AVROParquet and AVRO
Parquet and AVROairisData
 
MariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsMariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsFederico Razzoli
 
NoSQL bases de datos no relacionales
NoSQL bases de datos no relacionalesNoSQL bases de datos no relacionales
NoSQL bases de datos no relacionalesAndrés Londoño
 
Building robust CDC pipeline with Apache Hudi and Debezium
Building robust CDC pipeline with Apache Hudi and DebeziumBuilding robust CDC pipeline with Apache Hudi and Debezium
Building robust CDC pipeline with Apache Hudi and DebeziumTathastu.ai
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to CassandraGokhan Atil
 

Was ist angesagt? (20)

Redis and it's data types
Redis and it's data typesRedis and it's data types
Redis and it's data types
 
Caching solutions with Redis
Caching solutions   with RedisCaching solutions   with Redis
Caching solutions with Redis
 
NOsql Presentation.pdf
NOsql Presentation.pdfNOsql Presentation.pdf
NOsql Presentation.pdf
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak
 
Apache Spark - Introduccion a RDDs
Apache Spark - Introduccion a RDDsApache Spark - Introduccion a RDDs
Apache Spark - Introduccion a RDDs
 
Redis overview for Software Architecture Forum
Redis overview for Software Architecture ForumRedis overview for Software Architecture Forum
Redis overview for Software Architecture Forum
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
InnoDB Locking Explained with Stick Figures
InnoDB Locking Explained with Stick FiguresInnoDB Locking Explained with Stick Figures
InnoDB Locking Explained with Stick Figures
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
Bases de Datos NoSQL
Bases de Datos NoSQLBases de Datos NoSQL
Bases de Datos NoSQL
 
redis basics
redis basicsredis basics
redis basics
 
Sql vs NoSQL
Sql vs NoSQLSql vs NoSQL
Sql vs NoSQL
 
Redis introduction
Redis introductionRedis introduction
Redis introduction
 
Deep Dive into Cassandra
Deep Dive into CassandraDeep Dive into Cassandra
Deep Dive into Cassandra
 
Parquet and AVRO
Parquet and AVROParquet and AVRO
Parquet and AVRO
 
MariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsMariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAs
 
NoSQL bases de datos no relacionales
NoSQL bases de datos no relacionalesNoSQL bases de datos no relacionales
NoSQL bases de datos no relacionales
 
Redis overview
Redis overviewRedis overview
Redis overview
 
Building robust CDC pipeline with Apache Hudi and Debezium
Building robust CDC pipeline with Apache Hudi and DebeziumBuilding robust CDC pipeline with Apache Hudi and Debezium
Building robust CDC pipeline with Apache Hudi and Debezium
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to Cassandra
 

Ähnlich wie Taller Redis

Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAlberto Gimeno
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorAlberto Gimeno
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrolloJuan Ladetto
 
Pon tus aplicaciones a 100 con redis
Pon tus aplicaciones a 100 con redisPon tus aplicaciones a 100 con redis
Pon tus aplicaciones a 100 con redisDaniel Mazzini
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Antonio Ognio
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datosAntonio Ognio
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLRoanny Lamas
 
Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Ronny López
 
Polybase
PolybasePolybase
PolybaseSolidQ
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datosomar5544
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datosOtoniel Hernandez
 
Exposición BD Clave - Valor - Grupo 4 - 01DIC22.pptx
Exposición BD Clave - Valor - Grupo 4 - 01DIC22.pptxExposición BD Clave - Valor - Grupo 4 - 01DIC22.pptx
Exposición BD Clave - Valor - Grupo 4 - 01DIC22.pptxSleemChavarry
 
Construyendo Aplicaciones Web con PHP + LUA + REDIS
Construyendo Aplicaciones Web con PHP + LUA + REDISConstruyendo Aplicaciones Web con PHP + LUA + REDIS
Construyendo Aplicaciones Web con PHP + LUA + REDISGonzalo Chacaltana
 

Ähnlich wie Taller Redis (20)

Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valor
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
Pon tus aplicaciones a 100 con redis
Pon tus aplicaciones a 100 con redisPon tus aplicaciones a 100 con redis
Pon tus aplicaciones a 100 con redis
 
Las cronicas de redis
Las cronicas de redisLas cronicas de redis
Las cronicas de redis
 
Mongo Mapper
Mongo MapperMongo Mapper
Mongo Mapper
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datos
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
 
Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2
 
Base de datos
Base de datos Base de datos
Base de datos
 
introduccion bases de datos
introduccion bases de datosintroduccion bases de datos
introduccion bases de datos
 
Polybase
PolybasePolybase
Polybase
 
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datos
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datos
 
Exposición BD Clave - Valor - Grupo 4 - 01DIC22.pptx
Exposición BD Clave - Valor - Grupo 4 - 01DIC22.pptxExposición BD Clave - Valor - Grupo 4 - 01DIC22.pptx
Exposición BD Clave - Valor - Grupo 4 - 01DIC22.pptx
 
Servicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWSServicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWS
 
Grupo BD
Grupo BDGrupo BD
Grupo BD
 
Construyendo Aplicaciones Web con PHP + LUA + REDIS
Construyendo Aplicaciones Web con PHP + LUA + REDISConstruyendo Aplicaciones Web con PHP + LUA + REDIS
Construyendo Aplicaciones Web con PHP + LUA + REDIS
 

Mehr von betabeers

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformabetabeers
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)betabeers
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lagebetabeers
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavillabetabeers
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbaobetabeers
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu appbetabeers
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)betabeers
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)betabeers
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)betabeers
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)betabeers
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Usobetabeers
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startupbetabeers
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.betabeers
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización webbetabeers
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrumbetabeers
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottambetabeers
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTbetabeers
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015betabeers
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015betabeers
 

Mehr von betabeers (20)

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataforma
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lage
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Uso
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startup
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización web
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrum
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottam
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoT
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
 

Taller Redis

  • 1. Introducción y casos de uso @betabeers – Barcelona 17 de enero 2012
  • 2. ¿Quién soy? Ronny López @ronnylt Desarrollador @pricebets Descubrí Redis cuando una consulta como esta hacia que una página demorara +15 segundos en cargar: SELECT value FROM odds INNER JOIN outcomes ON ... INNER JOIN bets ON ... INNER JOIN markets ON ... ... WHERE ... ORDER BY ...
  • 3. Antes de continuar... ¿Qué hay de malo en los sistemas tradicionales de BD relacionales? Nada...
  • 4. Pero... • Hay tareas que no necesitan tanta complejidad • El modelo relacional actual es difícil de escalar horizontalmente • No se pueden modelar problemas comunes lo suficientemente bien
  • 5. ¿Qué es Redis? • Remote dictionary server • Motor de almacenamiento clave-valor avanzado, rápido y persistente • Servidor de estructuras de datos • NoSQL (Not-only SQL) • Open source
  • 6. ¿Quién está detrás de Redis? • Creado por Salvatore Sanfilippo @antirez • Release inicial en marzo del 2009 • Actualmente el desarrollo es patrocinado por VMWare • Comunidad activa y amigable
  • 7. ¿Quién usa Redis? • Usado hoy en el mundo real por grandes y pequeñas empresas • Resolviendo grandes y pequeños problemas
  • 8. ¿Quién usa Redis? Y muchos más... http://redis.io/topics/whos-using-redis
  • 9. ¿Para qué lo usan? • github.com: motor de almacenamiento clave/valor, cola de trabajos (resque) • guardian.co.uk: servidor de estructuras de datos persistente • disqus.com: sistema estádistico desarrollado sobre Redis • stackoverflow.com: capa de cache para toda su red • flickr.com: lista de trabajos • pricebets.es: almacenamiento primario (conjuntos, listas, hashes, etc...), routing, cache, sessions
  • 10. Características principales • Escrito en C • Muy pocas dependencias • Super rápido • Single-threaded • Clientes disponibles para varios lenguajes
  • 11. Características principales • Alto rendimiento en escritura y lectura • Soporte de operaciones atómicas • Soporte de transacciones
  • 12. Características Simplicidad • Fácil instalación • Curva de aprendizaje relativamente baja • Lenguage de comandos fácil de utilizar y aprender
  • 13. Características Previsibilidad • La memoria es rápida, y permite a Redis tener un redimiento muy fiable • Operaciones sobre datasets de 10 mil claves tendrán el mismo rendimiento que sobre datasets de 50 millones de claves • La complejidad algorítmica de todos los comandos está documentada
  • 14. Características Confiabilidad • Todos los datos residen en memoria, y son persistidos a disco eventualmente (snapshots, append-only log) • Replication system (master-slave) , pueden configurarse múltiples esclavos. Un esclavo puede ser el master de otro esclavo
  • 15. Características Persistencia • RDB, Point-in-time snapshots en intervalos configurados • AOF (append-only file) cada operación de escritura • Es posible combinar RDB y AOF en la misma instancia • Se puede deshabilitar la persistencia del todo
  • 16. Características Versatilidad • Adaptable a varios tipos de aplicaciones • Modelado de los datos a partir de estructuras de datos como listas, conjuntos, conjuntos ordenados y hashes
  • 17. Tipos de datos • Redis NO es simplemente un motor de almacenamiento clave-valor • Es un servidor de estructuras de datos que incluye varios tipos de datos predefinidos (strings, lists, sets, sorted sets, hashes)
  • 18. Claves • Puede usarse cualquier cadena de caracteres como clave • Es recomendable tener organizadas las claves en namespaces (keyspaces) de la forma: object-type:id:field Ejemplo: user:123:password user:456:friends
  • 19. Claves • NO es recomendable que las claves sean demasiado grandes (memoria, localización en el keyspace) • Tampoco es recomendable que las claves sean demasiado cortas por cuestiones de legibilidad Ejemplo: u:123:pw
  • 20. Tipos de datos Strings • Es el tipo de dato más simple • Si solamente usa este tipo de dato es similar a usar un servidor memcached pero con persistencia
  • 21. Operaciones con Strings $ redis-cli SET mykey “binary-safe string” OK $redis-cli GET mykey binary-safe string
  • 22. Operaciones Strings • Comandos SET/GET para escribir/leer • Los valores pueden ser cualquier string no mayor que 1 GB • Si necesita almacenar algo más grande, Redis is NOT for you ;)
  • 23. Operaciones atómicas Strings Atomic increment $ redis-cli SET counter 100 OK $ redis-cli INCR counter (integer) 101 $ redis-cli INCR counter (integer) 102 $ redis-cli INCRBY counter 10 (integer) 112
  • 24. ¿Por qué atómico? Aún cuando hayan varios clientes ejecuntando operaciones sobre la misma clave, no se va a incurrir en una condición de carrera (race condition)
  • 25. Otras operaciones Strings • APPEND, GETRANGE, STRLEN, ... • MSET, MGET, ... • SETNX, MSETNX, GETSET, ... http://redis.io/commands#string
  • 26. Tipos de datos Lists • Son simplemente una secuencia de elementos (strings) ordenados • Son implementadas como listas enlazadas
  • 27. Tipos de datos Lists • Listas doblemente enlazadas garantizan la inserción en cualquier extremo en un tiempo constante O(1) • Con estas caterísticas también puede modelarse una “cola”
  • 28. Operaciones Lists • LPUSH agrega un elemento en el extremo izquierdo de la lista • RPUSH en el extremo derecho • LRANGE extrae elementos de la lista en cierto rango
  • 29. Operaciones Lists • LPUSH, RPUSH, LPOP, RPOP, ... • LINDEX, LINSERT, LLEN, ... • LTRIM, LREM, ... http://redis.io/commands#list
  • 30. Variantes “blocking” • BLPOP, BRPOP, BRPOPLPUSH • Bloquean la conexión (del cliente) cuando no hay elementos en la lista • Ideal para implementar colas de trabajos/mensajes
  • 31. Operaciones Lists $ redis-cli RPUSH messages "Hola, ¿qué tal?" OK $ redis-cli RPUSH messages "Bien, gracias" OK $ redis-cli RPUSH messages "Muy grande Redis" OK $ redis-cli LRANGE messages 0 2 1. Hola, ¿qué tal? 2. Bien, gracias 3. Muy grande Redis
  • 32. Usos de las listas • Utilice listas cada vez que requiera acceder a los datos en el mismo orden en que se agregan • Ideal para casos en los que se requiere un ORDER BY de SQL • Escalable a millones de elementos manteniendo el mismo rendimiento
  • 33. Ejemplos de uso de las listas • Mantener un listado cronológico de los comentarios publicados en un blog • Es posible paginar usando LRANGE de forma trivial $ redis-cli RPOP post:123:comments 456 $ redis-cli RPOP post:123:comments 789 $ redis-cli LRANGE post:123:comments 50 60
  • 34. Tipos de datos Sets • Colección NO–ordenada de datos (conjuntos) • Permite operaciones típicas sobre conjuntos como unión, intersección, diferencia, etc... • Estas operaciones son difíciles de implementar en un modelo relacional
  • 35. Ejemplos Sets $ redis-cli SADD user:123:friends 456 (integer) 1 $ redis-cli SADD user:123:friends 789 (integer) 1 $ redis-cli SADD user:123:friends 123 (integer) 1 $ redis-cli SMEMBERS user:123:friends 1. 123 2. 456 3. 789 $ redis-cli SISMEMBER user:123:friends 789 (integer) 1
  • 36. Ejemplos Sets Etiquetado de noticias $ redis-cli SADD news:123:tags 1 (integer) 1 $ redis-cli SADD tags:1:objects 123 (integer) 1 Obtener todos los tags de una noticia es trivial $ redis-cli SMEMBERS news:123:tags
  • 37. Operaciones Sets • SADD, SREM, SCARD, SMEMBERS, SISMEMBER, ... • SUNION, SDIFF, SINTER, ... • SPOP, SRAND, .... O(1) http://redis.io/commands#set
  • 38. Tipos de datos Sorted Sets • Un conjunto ordenado es un conjunto donde a cada elemento se le asocia una puntuación (score) • Este valor (score) determina el orden de los elementos dentro del conjunto
  • 39. Tipos de datos Sorted Sets • ZADD es usado para agregar nuevos elementos o para actualizar el score de uno ya existente $ redis-cli ZADD top-sites: 4 “pricebets” (integer) 1 $ redis-cli ZADD top-sites: 6 “betabeers” (integer) 1 $ redis-cli ZRANGE top-sites 0 -1 1. betabeers 2. pricebets
  • 40. Operaciones Sorted Sets • ZADD, ZREM, ZCARD, ZCOUNT, ZINCR, ... • ZSCORE, ZINCRBY, ZRANK, ... • ZCOUNT, .... http://redis.io/commands#sorted_set
  • 41. Tipos de datos Hashes • Permiten que objetos compuestos se almacenen en una clave específica • Tipo de dato ideal para almacenar objetos complejos en Redis, usando los atributos del objeto como claves del hash
  • 42. Operaciones Hashes $ redis-cli HSET event:1 name betabeers $ redis-cli HSET event:1 date 2012-01-17 $ redis-cli HSET event:1 where Barcelona $ redis-cli HGETALL event:1 1) name 2) betabeers 3) date 4) 2012-01-17 5) where 6) Barcelona
  • 43. Operaciones Hashes • HSET, HGET, HDEL, HEXIST, ... • HKEYS, HGETALL, HVALS, ... • HMGET, HMSET, ... http://redis.io/commands#hash
  • 45. Contadores • Gran cantidad de escrituras/lecturas • Datos valiosos, pero NO críticos • Insertar una fila en MySQL o actualizar un contador en cada petición será sin dudas difícil de escalar
  • 46. Contadores $ redis-cli INCR active:sports:spain $ redis-cli INCR active:sports:italy $ redis-cli GET active:sports:spain $ redis-cli GETSET active:sports:spain 0
  • 47. Casos de uso Presencia ¿Quién está online? ¿Cuáles de mis amigos están online?
  • 48. Presencia • Mantener en un conjunto los usuarios que se han detectado online en cada minuto $ redis-cli SADD online:15:01 123 $ redis-cli SADD online:15:01 456 $ redis-cli SADD online:15:02 123
  • 49. Presencia • El conjunto de usuarios online se puede obtener de la UNION de los conjuntos relativos a los últimos ¿5? minutos. A las 15:05 $ redis-cli SUNION online:15:01 online:15:02 online:15:03 online: 15:04 online:15:05
  • 50. Presencia • El conjunto de “amigos” online es otra operación sobre conjuntos $ redis-cli SUNION online:15:01 online:15:02 online:15:03 online: 15:04 online:15:05 user:123:friends • Puede almacenarse en otra clave: $ redis-cli SUNIONSTORE friends:online:123 online:15:01 online:15:02 online:15:03 online: 15:04 online:15:05 user:123:friends
  • 51. Casos de uso Tabla de posiciones
  • 52. Tabla de posiciones • Se necesita listar elementos ordenados por una puntuación • Las puntuaciones se actualizan en tiempo real • Consultas lentas por naturaleza SELECT * FROM ... WHERE ... ORDER BY ... LIMIT 10
  • 53. Tabla de posiciones • Mantener un conjunto ordenado (sorted set) con los elementos y su score $ redis-cli ZADD popular:sports 10 football $ redis-cli ZADD popular:sports 6 basketball $ redis-cli ZADD popular:sports 12 football $ redis-cli ZREVRANGE popular:sports 0 9
  • 54. Casos de uso URL Routing
  • 55. URL Routing • Convertir alias de URL a paths internos de la aplicación Ejemplo: http://www.apuestas.com/futbol => /sport/1 http://www.apuestas.com/futbol/espana/copa-del-rey => /competition/3120
  • 56. URL Routing • Convertir paths internos a friendly URLs Ejemplo: /sport/1 => http://www.apuestas.com/futbol /competition/3120 http://www.apuestas.com/futbol/espana/copa-del-rey
  • 57. URL Routing • Mantener un hash con el routing y otro con los alias $ redis-cli HSET routing /futbol /sport/1 $ redis-cli HSET alias /sport/1 /futbol • Tiempo constante O(1) para cualquier número de rutas/alias
  • 59. ¿Qué se espera para próximas vesiones? • Scripting (con LUA) (Redis 2.6) • High resolution expires (Redis 2.6) • Mejoras en el rendimiento de la escritura/lectura de grandes objetos (Redis 2.6) • Redis Cluster (Redis 3.0)
  • 60. Algunos consejos • Instancias de Redis en 64 bits consumen más RAM • No usar el comando KEYS en producción • Comando MONITOR para observar y monitorear
  • 61. Benchmarks Processor 2.2 GHz Intel Core i7 redis-benchmark -q -n 100000 Memory 8 GB 1333 MHz DDR3 PING (inline): 108459.87 requests per second PING: 89766.61 requests per second MSET (10 keys): 48053.82 requests per second SET: 80064.05 requests per second GET: 87108.02 requests per second INCR: 82644.62 requests per second LPUSH: 82169.27 requests per second LPOP: 78802.20 requests per second SADD: 71890.73 requests per second SPOP: 93283.58 requests per second LPUSH (again, in order to bench LRANGE): 86880.97 requests per second LRANGE (first 100 elements): 64061.50 requests per second LRANGE (first 300 elements): 40064.10 requests per second LRANGE (first 450 elements): 30478.51 requests per second LRANGE (first 600 elements): 25873.22 requests per second
  • 62. Muchas gracias... $ redis-cli HGETALL pricebets 1. Buscamos 2. Programadores 3. PHP 4. jobs@pricebets.com