O Redis é um cache em memória que faz mais do que um cache normal (como o memcached) e menos que um banco de dados NoSql (como o MongoDB). Ele preenche esse campo intermediário e 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, mas isso ainda não é suportado pelo cache Redis do Azure. Já existe um pedido no uservoice para habilitar isso.
Leia: http://desenvolvedor.ninja/redis-o-que-e-e-para-que-serve/
Requisitos:
- Pacote StackExchage.Redis e .Net 4.0 ou superior
- Install-Package StackExchange.Redis
- Habilitar o modo de desenvolvedor no Win10
Código da aplicação:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using StackExchange.Redis; // É necessário instalar um pacote via Nuget do Redis: // Install-Package StackExchange.Redis // Logo em seguida é necessário refêrencia-la no projeto. namespace RedisCacheClientApp { // Aplicação Teste de como se utilizar o conceito de Redis no Azure // Desenvolvido por: Guilherme Seabra // Os dados são armazenados na forma de chave-valor como mostra na aplicação a // seguir. class Program { static void Main(string[] args) { // variavel de conexao composta por nome do host , autenticacao , // chave primaria de acesso. Todas essas informações foram extraídas // do Azure Cache Redis. var conexao = @"empresa.redis.cache.windows.net, ssl=true, password=C4PFztzag9bkmdfnkdfklI0Xd4GUVMuueCX0eF1g="; // criando a conexão com o banco utilizando a classe // ConnectionMultiplexer using (var connection = ConnectionMultiplexer.Connect(conexao)) { var cache = connection.GetDatabase(); // salva o valor cache.StringSet("chave", "valor"); cache.StringSet("outra-chave", 10); // ler o valor var chave = cache.StringGet("chave"); var outraChave = (int)cache.StringGet("outra-chave"); // exibe o valor na tela Console.WriteLine("chave: {0}", chave); Console.WriteLine("outra-chave: {0}", outraChave); Console.ReadKey(); // Para acompanhar o monitoriamento é necessário logar no // portal do Azure pelo endereço de conexão, porém essa tarefa // será destinada a equipe de infra. } } } }
Resultado do monitoramento no Azure:
Já o WebJobs é hospedado no Azure como parte de seu site web, com todos os benefícios que PaaS (Platform as a Service) pode oferecer. O SDK do Azure WebJobs simplifica a tarefa de criar e monitorar processamento em segundo plano. Ele ainda oferece uma integração com o armazenamento do Azure (blobs, filas, tabelas) ou com o Service Bus.
As funções Azure permitem que você escreva código em resposta a eventos no Azure e outros serviços, por meio de disparadores e ligações.
Para transformar um trabalho web sob demanda em um trabalho web agendado, basta incluir um arquivo settings.job na raiz do arquivo .zip do trabalho web. Esse arquivo JSON deve incluir uma propriedade schedule com uma expressão CRON, como mostrado no exemplo abaixo.
A expressão CRON é composta por 6 campos: {segundos} {minutos} {horas} {dias} {meses} {dias da semana}.
Por exemplo, para disparar o WebJob a cada 15 minutos, o settings.job teria:
JSON:
{ "schedule": "0 */15 * * * *" }
Observação: ao implantar um trabalho web do Visual Studio, certifique-se de marcar as propriedades do arquivo settings.job como “Copiar se mais recente”.
Código da aplicação:
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using WebJobConsole.Domínio; namespace WebJobConsole.Persistência { // Criação de uma classe ClienteDAO public class ClienteDAO { // Criando uma nova conexão private ConexaoDAO _minhaConexao; // Criação de um novo método que retorna um objeto do banco public void GetClientes() { // Instanciando a conexão _minhaConexao = new ConexaoDAO(); // Instanciando um novo objeto para manipulação ClienteBO clienteBo = new ClienteBO(); // Condição se está ativo int StatusId = 1; try { // Query a ser rodada string StrCommand = @"Select ClienteId, Nome, Sobrenome, Documento FROM Cliente WHERE StatusId= '" + StatusId + "'"; using (SqlCommand command = new SqlCommand(StrCommand, _minhaConexao._conexao)) // Preenchendo os atributos do objeto com os dados da tabela using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { clienteBo.ClienteId = Convert.ToInt32(reader[0]); clienteBo.Nome = reader[1].ToString(); clienteBo.Sobrenome = reader[2].ToString(); clienteBo.Documento = Convert.ToInt32(reader[3]); } } // Fecha conexão _minhaConexao.Dispose(); } // Trata excessão catch (Exception e) { Console.WriteLine("Não foi possível recuperar as informações. " + e.Message); Console.ReadKey(); } // Imprime resultados na tela Console.WriteLine("Informações Recuperadas com Sucesso."); Console.WriteLine(""); Console.WriteLine("ClientID: " + clienteBo.ClienteId); Console.WriteLine("Nome: " + clienteBo.Nome); Console.WriteLine("Sobrenome: " + clienteBo.Sobrenome); Console.WriteLine("Documento: " + clienteBo.Documento); // Congela Resultado Console.ReadKey(); } } }
Resultado do monitoramento no Azure:
Publicação do WebJob
Para publicar, clique com o botão direto sobre o projeto do WebJob e escolha a opção “Publish as Azure WebJob”, conforme exibido na imagem a seguir:
Em seguida, será exibida a tela de configuração da execução do WebJob (conforme imagem a seguir). Você poderá escolher a forma de execução do WebJob, contínuo, sob demanda ou programado. Após a confirmação, será criado o arquivo “webjob-publish-settings.json” dentro das properties do projeto do WebJob com a configuração desejada.
webjob-publish-settings.json
Quando você configura um Aplicativo de Console para implantação de trabalhos web, o Visual Studio instala o pacote NuGet Microsoft.Web.WebJobs.Publish e armazena informações de agendamento em um arquivo webjob-publish-settings.json na pasta Propriedades do projeto dos trabalhos web.
Resultado do WebJob disparado a cada 15 minutos: