Remote Dictionary Server

REDIS

Què és REDIS ?

NoSQL en memòria
cache → primària
ANSI C
2009 Antirez
v2.8


craiglist, digg, stackoverflow, flickr, blizzard...

Alternatives




Beneficis



Velocitat !

" data served from memory, disk used for storage "

Altres beneficis

Tipus de dades

Operacions atòmiques

Comunitat creixent

Suport per a molts llenguatges



Tipus de dades

Strings

SET & GET
redis> SET mykey "Hello"
OK                                           
redis> GET mykey"Hello"

Altres comandes:  EXISTS, APPEND, STRLEN

Hashes

HSET & HGET
redis> HSET myhash field1 "foo" 
(integer) 1 
redis> HGET myhash field1 
"foo"
HVALS
redis> HSET myhash field1 "Hola"
(integer) 1
redis> HSET myhash field2 "Món"
(integer) 1
redis> HVALS myhash
1) "Hola"
2) "Món"
Altres comandes: HKEYS, HLEN, HEXISTS, HDEL

Lists

LPUSH & LRANGE & LPOP
redis> LPUSH mylist "world"            //mylist = ["world"]
(integer) 1                                           
redis> LPUSH mylist "hello"            //mylist =["hello","world"]
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "world"
redis> LPOP mylist "hello"
redis> LRANGE mylist 0 -1
1) "world"

Altres comandes: RPUSH,  RPOP, LLEN, LINSERT

Sets

SADD  & SPOP & SMEMBERS

SDIFF
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}

redis> SDIFF key1 key2 key3 //{a,b,c,d} - "c" = {a,b,d} - "a" = {b,d} 1) "b" 2) "d"

Altres comandes: SUNION, SINTER, SCARD, SMOVE

Sorted Sets

Member Score

ZADD & ZRANGE

redis> ZADD myzset 1 "blau"
(integer) 1
redis> ZADD myzset 1 "vermell"
(integer) 1
redis> ZADD myzset 2 "groc"
(integer) 1
redis> ZADD myzset 3 "groc"
(integer) 0
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "blau"
2) "1"
3) "vermell"
4) "1"
5) "groc"
6) "3"

Altres comandes: ZINCRBY, ZRANGEBYSCORE



Administració

Instal·lació i configuració


Instal·lació


Configuració: redis.conf

  • Memòria

  • Snapshotting

  • Replicació 

  • Seguretat

Eines

Redis Commander

Redsmin


Comandes de Servidor


CONFIG GET * SAVE/BGSAVE PING
SHUTDOWN INFO SELECT
CLIENT LIST CLIENT KILL FLUSHDB
SLAVEOF MONITOR KEYS  in*

Replicació


Slaves = Master

escalar lectura
redundància de dades

síncrona desde v2.8

Persistència

RDB | AOF

RDB snapshots

  • dump.rdb
  • configurables  ex: save 60 1000
  • disaster recoveries

Recomanacions

  • RDB o RDB+AOF
  • cron horari i diari + transfer diari

Seguretat


Redis is designed to be accessed by trusted clients inside trusted environments ..





L'aplicació s'encarrega de la seguretat

+

Seguretat de la pròpia xarxa: Firewall

Altres ...


Pipelining de comandes

Mass-Insertion

Sharding

Scripting amb LUA


Propera versió : 3.0.0 amb clustering



Un cas pràctic ...

l'API Externa

Si fos una BD relacional ...


Modelat

Pla HashMap
Client HashMap
Aplicació HashMap
Aplicacions d'un client List
Dominis d'una aplicació List
Subscripcions d'aplicacions a plans HashMap
Consums de les aplicacions Sorted Set


L'API fa Servir JEDIS

Inserció de dades

Pla

r.hmset('pla:1', {'nom':'Lliure xema', 'api':'xema','quota':'1000'}) r.hmset('pla:2', {'nom':'Basic xema', 'api':'xema','quota':'30000'}) 

Client

r.hmset('client:00000001', {'nom':'empresa 1', 'email':'contacte@empresa1.com'})

Aplicació

r.hmset('aplicacio:11111111', {'nom':'Nom aplicació 1','sak':'101010101010', 'client':'00000001', 'alta':'1377986400000', 'baixa':'1914444000000'})

Aplicacions d'un client

r.rpush('client:00000001:aplicacions','11111111','22222222')

Inserció de dades

Dominis d'una aplicació

r.rpush('aplicacio:11111111:dominis','pc-epa.meteocat.com','localhost','pc-asp.meteocat.com')

Subscripcions a plans d'una aplicació

r.hmset('aplicacio:11111111:subscripcions:1', {'codipla':'4', 'alta':'1377986400000', 'baixa':'1914444000000'})
r.hmset('aplicacio:11111111:subscripcions:2', {'codipla':'8', 'alta':'1377986400000', 'baixa':'1914444000000'})

I els Consums? 

amb Conjunts Ordenats

Conjunts Ordenats a l'API

Score/Value

Score = número de peticions exitoses 
Value = Timestamp identificatiu de mes

 Inicialització

zadd aplicacio:11111111:consums:pla:3 0 1377986400000 //01-09-13 0:0h

Increment del Score

ZINCRBY aplicacio:11111111:consums:pla:3 1 1377986400000

Passat un temps...

conjunt = {1050 1377986400000, 1823 1380578400000, ...}


Gràcies!

REDIS

By Emilio Ponce

REDIS

Introducció a REDIS

  • 758