Back-End

3 set, 2012

Realizando inserções no Redis com o Python

Publicidade

Pra quem não sabe, o Redis é um in-memory, key-value data store. Isso significa que o Redis é uma engine que grava chave e valor, como um memcached, porém, persistente. Ele suporta dados em String, Integers, Lists, Sets, Ordered Sets e Hash Tables; e também faz o uso de operações atômicas (uma alteração por vez), e possui os métodos: get/set, push/pop, add/remove, union, intersect, diffs, dentre outros, incluindo opções de ordenação.

O Redis também mantem, por padrão, todos os dados em memória, e salva snapshots para o disco de forma assíncrona ou escrevendo cada mudança para um Append Only File”.

Algumas empresas de grande destaque no mercado já aderiram ao Redis, como o GitHub, TweetDeck, Flickr, StackOverflow, dentre outras. Você pode ter acesso a uma lista completa neste link.

Para começar, precisamos, em primeiro lugar, ter o Redis instalado em nosso ambiente. Se você possui um ambiente OS X ou Linux, basta executar os seguintes comandos:

$ wget http://redis.googlecode.com/files/redis-2.4.16.tar.gz
$ tar xzf redis-2.4.16.tar.gz
$ cd redis-2.4.16
$ make

Logo após executar esses comandos, verifique se consegue executar o Redis:

$ src/redis-server

Você deverá ver algo como: [10831] 09 Aug 23:09:37 * Server started, Redis version 2.4.16

Caso esteja rodando em ambiente Windows, acesse a página de downloads do Redis e baixe o executável.

Agora é hora de brincar um pouco! Vamos fazer uma inserção básica no nosso Redis local utilizando Python. Para isso, precisaremos da lib do Redis para a linguagem. Você pode verificar se já possui essa lib entrando no shell interativo do Python e importando a mesma.

Nota: é indicado criar um ambiente virtual para a instalação de qualquer biblioteca Python em sua máquina. Para isso, acesse a documentação do virtualenv e siga as instruções de instalação.

$ python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>>

Caso não receba nenhum erro, parabéns! Você já possui a lib Redis instalada. Caso contrário, instale-a pelo pip (package manager do Python).

$ pip install redis
Pronto! Agora que você já instalou tudo o que precisamos, vamos finalmente fazer uma inserção local no Redis.

Vamos conectar ao nosso banco local, e então faremos o seguinte:

import redis
redis = redis.Redis('localhost')

Pronto! Já estamos conectados ao Redis localmente. A biblioteca do Redis para Python disponibiliza métodos bem fáceis de interagir, então, se quisermos inserir uma key/value, basicamente rodamos o comando abaixo:

redis.set('foo','bar')

Para testarmos se realmente funcionou, vamos executar esse outro comando:

print redis.get('foo')
Caso o resultado seja ‘bar’, ótimo! Já está funcionando e você pode brincar inserindo dados no seu redis!

Agora que aprendemos a trabalhar com Strings no Redis, vamos trabalhar com outros tipos de dados:

Lists

Trabalhar com listas no Redis é bem parecido com trabalhar com elas em Python. Alguns métodos usando lists:

redis.rpush('ferramentas', 'martelo')
redis.rpush('ferramentas', 'serrote')
redis.rpush('ferramentas', 'machado')

redis.lrange('ferammentas', 0, -1)
// martelo, serrote, machado

redis.llen('ferramentas')
// 3

redis.lindex('ferramentas', 1)
// martelo

Sets

Os Sets também são muito parecidos com a estrutura de listas em Python, porém, aqui uma lista não pode conter valores iguais. Os elementos são únicos. Exemplo:

redis.delete('ferramentas')
// True

redis.sadd('ferramentas', 'martelo')
// True

redis.sadd('ferramentas', 'serrote')
// True

redis.sadd('ferramentas', 'machado')
// True

redis.sadd('ferramentas', 'martelo')
// False

redis.smembers('ferramentas')
// set(['serrote', 'machado', 'martelo'])

Essa estrutura de dados é muito utilizada quando você precisa validar uma entrada, como um sistema de votação.

Sets ordenados

Por último, temos os sets ordenados. São como os sets normais, porém com um atributo adicinoal chamado “score”. Esse atributo define a ordem do elemento no conjunto.

redis.zadd('test:scores', 'testid:9000', 50)
// True

redis.zadd('test:scores', 'testid:8000', 20)
// True

redis.zadd('test:scores', 'testid:7000', 45)
// True

redis.zadd('test:scores', 'testid:7000', 45)
//False

redis.zrange('test:scores', 0, -1, withscores=True)
// [('testid:7000', 30.0), ('testid:8000', 40.0), ('testid:9000', 50.0)]

Com isso, temos nossa lista ordenada funcionando, e também podemos revertê-la facilmente:

test = redis.zrange('test:scores', 0, -1, withscores=True)
test.reverse()
test
// [('testid:9000', 50.0), ('testid:8000', 40.0), ('testid:7000', 30.0)]

Bom, é isso! Agora podemos trabalhar um pouco mais com o Redis!

Caso queira saber mais sobre os outros métodos que podem ser utilizados, acesse a documentação e garanta horas de diversão com essa incrível ferramenta!