Software de armazenamento de dados: Como aproveitar ao máximo o potencial de Redis?

Software de armazenamento de dados: Como aproveitar ao máximo o potencial de Redis?

Um de nossos programadores sentiu a necessidade de trabalhar com o Redis, trata-se de uma solução para armazenamento de dados que não usa o formato clássico de tabelas e colunas, mas permite armazenar dados de vários tipos que podem ser acessados através de uma Key.

Redis, no jargão técnico, é um armazenamento de chave-valor (Key-Value Storage), que tem suporte para listas de dados: sets - que não permitem dados duplicados; sets ordenados - que permitem associar chaves a determinados dados e usá-las para executar várias operações, inclusive em estruturas simples chamadas hashes, entre outras possibilidades.

A primeira coisa que você descobre quando começa a trabalhar com esse tipo de banco de dados não estruturado é que os nomes das Keys são críticos. Portanto, é importante conhecer quais operações são de alta velocidade, ou seja, O(1). Este parâmetro é denominado Complexidade de Tempo (Time Complexity) e cada um dos comandos do Redis indica que o fator, por exemplo, GET ou SET são O(1), enquanto o SINTER - que permite uma interseção de dois sets - é O(N*M), onde N é a quantidade de elementos do set menor e M a quantidade de sets envolvida na operação. Pode-se avaliar o quão bem pensado é um software que usa o Redis ao se analisar a distribuição de complexidade do uso do tempo, visando O(1) a 100%.

Outra funcionalidade muito útil do Redis é a possibilidade de atribuir uma data de validade a uma determinada Key. Por exemplo, poderíamos criar um software de gerenciamento de sessões usando SESSION_{UserId} como nome de uma Key, que armazenará o valor da identificação da sessão, e estabelecer que esta Key expirará em dez minutos. Este conceito de volatilidade encontra-se bem implementado no Redis e você pode começar a estudá-lo aqui.

Nosso programador, Arturo, precisava implementar o prazo de expiração, mas em nível de dados e não em nível de chaves, Keys. Hoje queremos compartilhar com vocês um pouco do código implementado, uma vez que não há exemplos na web para outros idiomas e nada para o Python. O código é uma classe chamada DeadSet (devido tanto à funcionalidade implementada, expiração de itens em Sets Redis, quanto por ser um jogador profissional do jogo Diablo 3 da empresa Blizzard, da qual nosso programador é fã). Vejamos um exemplo de uso:

import redis
import datetime
from deadset import DeadSet

r = redis.StrictRedis(...)
expDate = datetime.timedelta(days=7)
dsetkey = "DEAD_IN_A_WEEK"

datakey = "THIS_HOLDS_DATA"
data = {"a": 4, "b": 2}
dset = DeadSet(keyname=dsetkey,
               default_expire=expDate,
               rdb=r)
dset.add_expiring_item(itemId=datakey, itemdata=data)

Neste exemplo, trabalhamos com a Key DEAD_IN_A_WEEK, a qual é adicionado um item com o nome “THIS_HOLDS_DATA”, que, por sua vez, tornar-se- á uma Key do tipo Redis Hash que armazenará as informações dos dados variáveis (a=4, b=2). Tanto o item como a key expirarão automaticamente dentro de sete dias, graças aos quais podemos especificar a expiração através de um python timedelta. Isso significa que se pode converter as operações O(N), caras em termos de tempo, em operações imediatas O(1), com expiração automática como valor agregado, otimizando, assim, o nosso software. Você pode acessar a classe DeadSet em nosso repositório git: neste endereço.

Fraudes em sistemas de pagamento online: sua informação pessoal  vale muito mais do que você acredita

Fraudes em sistemas de pagamento online: sua informação pessoal vale muito mais do que você acredita

Abre-te Sésamo! Os usos da biometria aplicados à segurança informação

Abre-te Sésamo! Os usos da biometria aplicados à segurança informação