Conhecendo o cache Redis do Azure

Esse post foi migrado do blog antigo. A publicação original foi no dia 18/02/2015

Esse post também foi publicado no Imasters

Hoje vamos falar sobre cache, Redis, Azure e como fica tudo isso quando usamos o Cache Redis do Azure.

Mas, primeiro, vamos entender o que é o Redis.

Redis

Redis is an open source, BSD licensed, advanced key-value cache and store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets, sorted sets, bitmaps and hyperloglogs.

Em outras palavras, Redis é um cache em memória que faz mais que um cache normal, como o memcached e menos que um banco de dados NoSql, como o MongoDB. Redis preenche esse campo intermediário.

Redis funciona muito bem como um armazenamento chave-valor, mas também aceita outras estruturas de dados, como Lists, Sets, Sorted Sets, Hashes e Bitmap. Além disso, também tem outras funcionalidades como transações e pubsub. Mas, apesar de ter tudo disso, ainda é um cache em memória, ou seja, se o serviço parar, todos os dados são perdidos*.

É importante saber que Redis é otimizado para ter uma latência baixíssima e pode não estar sempre consistente. É o que se chama de consistência eventual.

O Redis consegue persistir os dados de memória de diversas maneiras (documentação), mas isso ainda não é suportado pelo cache Redis do Azure. Já existe um pedido no uservoice pra habilitar isso.

Cache Redis do Azure

Usando o cache Redis do Azure, você ganha o monitoramento do cache de graça e, no plano standard, você tem replicação automática (Master/Slave).

Criando um cache Redis no Azure

Para começar, vamos criar o serviço:

Depois preencher as configurações:

Quando você clicar em “OK”, pode demorar alguns minutos até a criação do cache Redis, já que, por trás dos panos, uma máquina virtual dedicada ao seu serviço está sendo criada.

Ok, cache Redis criado. Por padrão, o monitoramento vem desabilitado. Para habilitar, clique em qualquer aviso de monitoramento desabilitado e selecione a conta de Armazenamento para salvar os logs.

Os custos de armazenamento se aplicam aqui, por isso você pode configurar a retenção desses logs pelo tempo que julgar apropriado.

Não se esqueça de usar uma conta de armazenamento que esteja na mesma região do cache Redis para evitar custos de transferência de dados entre regiões. Isso vale pra todos os serviços do Azure.

Agora, podemos interagir com nosso cache!

Usando o Redis

Para acessar qualquer cache Redis com autenticação, precisamos utilizar o hostname e a senha.

No caso do cache Redis do Azure, o hostname fica na aba properties.

Já a senha, podemos encontrar na aba keys. Podemos usar tanto a chave primária quanto secundária como senha.

.NET

using System;  
using StackExchange.Redis;

namespace ConsoleApplication1
{
public class Program
{
private static void Main()
{
var conexao = @"testeblog.redis.cache.windows.net, ssl=true, password=e3zFsDIv0gWnThaXV6bydaCmGQBNP/55b2W1M/ZJ8UA=";
using (var connection = ConnectionMultiplexer.Connect(conexao))
{
var cache = connection.GetDatabase();

cache.StringSet("chave", "valor");
cache.StringSet("outra-chave", 10);

var chave = cache.StringGet("chave");
var outraChave = (int) cache.StringGet("outra-chave");

Console.WriteLine("chave: {0}", chave);
Console.WriteLine("outra-chave: {0}", outraChave);
}
}
}
}

Outros clientes

Agora conseguimos conectar todos os clientes que não suportam SSL.

Node.js

var redis = require('redis');  
var client = redis.createClient(6379, 'testeblog.redis.cache.windows.net', {
auth_pass: 'e3zFsDIv0gWnThaXV6bydaCmGQBNP/55b2W1M/ZJ8UA='
});
var callback = function(erro, resposta) {
if(!erro) {
console.log(resposta);
}
};

client.set('chave-node', 'valor-node', callback);
client.set('outra-chave-node', 20, callback);
client.get('chave-node', callback);
client.get('outra-chave-node', function(e, r) {
callback(e, r);
client.end();
});

Linha de comando

c:\>choco install redis-64  
Chocolatey (v0.9.8.33) is installing 'redis-64' and dependencies. By installing you accept the license for 'redis-64' and each dependency you are installing.

Finished installing 'redis-64' and dependencies - if errors not shown in console, none detected. Check log for errors if unsure.

c:\>redis-cli -h testeblog.redis.cache.windows.net -a e3zFsDIv0gWnThaXV6bydaCmGQBNP/55b2W1M/ZJ8UA=
testeblog.redis.cache.windows.net:6379> ping
PONG
testeblog.redis.cache.windows.net:6379> set "chave-cmd" "valor-cmd"
OK
testeblog.redis.cache.windows.net:6379> get "chave-cmd"
"valor-cmd"
testeblog.redis.cache.windows.net:6379> get "chave"
"valor"
testeblog.redis.cache.windows.net:6379> get "chave-node"
"valor-node"
testeblog.redis.cache.windows.net:6379> exit

Monitoramento

Finalizando

E você, tem um case pra utilizar o Redis? Eu adoraria conhecer!

Luís Rudge é pai e desenvolvedor há anos. Trabalha na Round Pegs Inc & seu projeto pessoal http://www.uniclearning.com.br/ — hospedado inteiramente no Azure

Luís Rudge é pai e desenvolvedor há anos. Trabalha na Round Pegs Inc & seu projeto pessoal http://www.uniclearning.com.br/ — hospedado inteiramente no Azure