redis-reference

Agenda

  • Problema
  • Solução
  • Implementação

Arquitetura

Premissas

  • Fonte final da informação
  • Fonte atualizada

Por que?

  • Rápido
  • Fácil de administrar

Design

schema v 0.1

[{id_produto: 100, url: "//dominio.com/produto/100", nome: "Nome Produto0"},
 {id_produto: 101, url: "//dominio.com/produto/101", nome: "Nome Produto1"},
 {id_produto: 102, url: "//dominio.com/produto/102", nome: "Nome Produto2"},
 {id_produto: 103, url: "//dominio.com/produto/103", nome: "Nome Produto3"},
 {id_produto: 104, url: "//dominio.com/produto/104", nome: "Nome Produto4"},
 {id_produto: 105, url: "//dominio.com/produto/105", nome: "Nome Produto5"},
 {id_produto: 106, url: "//dominio.com/produto/106", nome: "Nome Produto6"},
 {id_produto: 107, url: "//dominio.com/produto/107", nome: "Nome Produto7"},
 {id_produto: 108, url: "//dominio.com/produto/108", nome: "Nome Produto8"},
 {id_produto: 109, url: "//dominio.com/produto/109", nome: "Nome Produto9"}]
userid:cid:recs =
[{id_produto: 100, url: "//dominio.com/produto/100", nome: "Nome Produto0"},
 {id_produto: 101, url: "//dominio.com/produto/101", nome: "Nome Produto1"},
 {id_produto: 102, url: "//dominio.com/produto/102", nome: "Nome Produto2"},
 {id_produto: 103, url: "//dominio.com/produto/103", nome: "Nome Produto3"},
 {id_produto: 104, url: "//dominio.com/produto/104", nome: "Nome Produto4"},
 {id_produto: 105, url: "//dominio.com/produto/105", nome: "Nome Produto5"},
 {id_produto: 106, url: "//dominio.com/produto/106", nome: "Nome Produto6"},
 {id_produto: 107, url: "//dominio.com/produto/107", nome: "Nome Produto7"},
 {id_produto: 108, url: "//dominio.com/produto/108", nome: "Nome Produto8"},
 {id_produto: 109, url: "//dominio.com/produto/109", nome: "Nome Produto9"}]
userid:cid:recs =
[{id_produto: 100, url: "//dominio.com/produto/100", nome: "Nome Produto0"},
 {id_produto: 101, url: "//dominio.com/produto/101", nome: "Nome Produto1"},
 {id_produto: 102, url: "//dominio.com/produto/102", nome: "Nome Produto2"},
 {id_produto: 103, url: "//dominio.com/produto/103", nome: "Nome Produto3"},
 {id_produto: 104, url: "//dominio.com/produto/104", nome: "Nome Produto4"},
 {id_produto: 105, url: "//dominio.com/produto/105", nome: "Nome Produto5"},
 {id_produto: 106, url: "//dominio.com/produto/106", nome: "Nome Produto6"},
 {id_produto: 107, url: "//dominio.com/produto/107", nome: "Nome Produto7"},
 {id_produto: 108, url: "//dominio.com/produto/108", nome: "Nome Produto8"},
 {id_produto: 109, url: "//dominio.com/produto/109", nome: "Nome Produto9"}]
userid:cid:recs =

Características

  • Trivial de fazer
  • Desperdiça espaço
  • Dificulta atualização

Características

  • Trivial de fazer
  • Desperdiça espaço
  • Dificulta atualização

Espaço

Atualização

Espaço

Atualização

Opções

  • No cliente Vs Nativa

No cliente

import redis

c = redis.StrictRedis(host='127.0.0.1', port=6379,
                      db=0)

recs = c.get('user') # user=1,2,3,4,5,6,7,8,9,10
ids = recs.split(',')
all = ",".join([c.get('oid:' + k) for k in ids])

No cliente

import redis

c = redis.StrictRedis(host='127.0.0.1', port=6379,
                      db=0)

recs = c.get('user') # user=1,2,3,4,5,6,7,8,9,10
ids = recs.split(',')
all = ",".join([c.get('oid:' + k) for k in ids])

11 Gets

Nativa

import redis

c = redis.StrictRedis(host='127.0.0.1', port=6379,
                      db=0)

all = c.execute_command('reference.query oid user')

Nativa

import redis

c = redis.StrictRedis(host='127.0.0.1', port=6379,
                      db=0)

all = c.execute_command('reference.query oid user')

1 Get

schema v 0.2

user1 = 100,101,102,103,104,105,106,107,108,109
user2 = 109,107,108,101,104,105,106,107,103,100
...
oid:100 = {id_produto: 100, url: "//dominio.com/produto/100", nome: "Nome Produto0"}
oid:101 = {id_produto: 101, url: "//dominio.com/produto/101", nome: "Nome Produto1"}
oid:102 = {id_produto: 102, url: "//dominio.com/produto/102", nome: "Nome Produto2"}
oid:103 = {id_produto: 103, url: "//dominio.com/produto/103", nome: "Nome Produto3"}
oid:104 = {id_produto: 104, url: "//dominio.com/produto/104", nome: "Nome Produto4"}
oid:105 = {id_produto: 105, url: "//dominio.com/produto/105", nome: "Nome Produto5"}
oid:106 = {id_produto: 106, url: "//dominio.com/produto/106", nome: "Nome Produto6"}
oid:107 = {id_produto: 107, url: "//dominio.com/produto/107", nome: "Nome Produto7"}
oid:108 = {id_produto: 108, url: "//dominio.com/produto/108", nome: "Nome Produto8"}
oid:109 = {id_produto: 109, url: "//dominio.com/produto/109", nome: "Nome Produto9"}

Nativa

  • Economia de memória
  • Atualização em 1 ponto

Fim

@prognoos

Redis - reference mod

By Felipe Cruz

Redis - reference mod

  • 602