Redis – utilizando com Autofac

redis
Facebooktwittergoogle_plusredditpinterestlinkedinmail

Hoje vamos ver como utilizar o Redis juntamente com o Autofac, registrando as classes do client do Redis no container do Autofac. Nós já vimos anteriormente aqui como utilizar o Redis com C# utilizando o StackExchange.Redis e vimos como criar um Extender para abstrair e tornar transparente a serialização de objetos ao trabalhar com o Redis. Assim como também já vimos como utilizar o Autofac e como utilizá-lo com WCF. Para o post de hoje, vamos usar o que vimos nesses posts anteriores. Vamos usar a aplicação que fizemos no post sobre WCF como base para o exempo de hoje, portanto baixe o código dela disponível em https://github.com/rdakar/autofac-wcf. Se tiver alguma dúvida do que foi feito na aplicação, de uma olhada no post que a construimos aqui. Com a aplicação aberta no Visual Studio, baixe o pacote StackExchange.Redis.Extender do NuGet, para adicionar os pacotes que precisamos para trabalhar com o Redis.

Agora, vamos abrir o arquivo Global.asax.cs e editar o método Application_Start para adicionar o registro das classes do Redis. Nós vamos inserir as duas linhas abaixo:

builder.Register<ConnectionMultiplexer>(c => ConnectionMultiplexer.Connect("localhost:13919,password=senhadoredis")).SingleInstance();
builder.Register<IDatabase>(c => c.Resolve<ConnectionMultiplexer>().GetDatabase());

O que estamos fazendo aqui é registrando o ConnectionMultiplexer, e já abrindo uma conexão com o Redis, além de dizer ao container do Autofac, que desejamos que ele seja um singleton, ou seja, uma única instância para toda aplicação. Na segunda linha, estamos registrando a interface IDatabase, e falando para o container devolver uma instância dela a partir do método GetDatabase da classe ConnectionMultiplexer.

O método completo ficou assim:

protected void Application_Start(object sender, EventArgs e)
{
    var builder = new ContainerBuilder();

    // Register your service implementations.
    builder.RegisterType<AutofacDemoWCF.Service1>();
    builder.RegisterType<Soma>().As<ICalculo>().InstancePerLifetimeScope();

    builder.Register<ConnectionMultiplexer>(c => ConnectionMultiplexer.Connect("localhost:13919,password=senhadoredis")).SingleInstance();
    builder.Register<IDatabase>(c => c.Resolve<ConnectionMultiplexer>().GetDatabase());

    // Set the dependency resolver.
    AutofacHostFactory.Container = builder.Build();
}

Pronto, isso é tudo que precisamos fazer para utilizar o Redis com o Autofac, agora vamos editar o nosso serviço Service1, para testarmos a utilização do Redis. Vamos declarar uma variável do tipo IDatabase na classe Service1:

private IDatabase _database;

E vamos alterar o construtor, para receber um IDatabase como parâmetro:

public Service1(ICalculo calculo, IDatabase database)
{
    this._calculo = calculo;
    this._database = database;
}

Vamos agora alterar a interface de nosso serviço IService1, para incluir dois métodos:

[OperationContract]
bool SetRedis(string key, string value);

[OperationContract]
string GetRedis(string key);

Agora voltamos até Service1, e vamos implementar esses dois métodos, que ficarão assim:

public bool SetRedis(string key, string value) => _database.StringSet(key, value);

public string GetRedis(string key) => _database.StringGet(key);

Agora compile o projeto, e execute-o utilizando o WCF Test Client, e faça o teste chamando o método SetRedis, passando uma chave e um valor, e depois chame o método GetRedis passando a chave que definiu quando chamou o SetRedis e veja o resultado. Simples não? Dessa forma não precisamos ficar nos preocupando em manter e reutilizar o ConnectionMultiplexer, o Autofac faz isso para nós, assim também como não precisamos ficar nos preocupando com o IDatabase, pois o Autofac também abstrai isso para nós.

É super simples trabalhar com o Autofac em conjunto com o Redis, e altamente recomendável que se utilize um framework de inversão de controle e injeção de dependência em sua aplicação, seja o Autofac ou algum outro.

O código completo de nosso exemplo está disponível no GitHub: https://github.com/desenvolvedorninja/redis-com-autofac

 

 

Quase 20 anos de experiência no mercado de TI.
Atuação em grandes empresas como Netshoes, Borland, JBS, Bradesco, Hospital das Clínicas, Rede, Prodam, HSPE, Instituto Ayrton Senna, e também em empresas internacionais como Delta Dental, T-Mobile, Pepsi e Mckesson.
Fundador da TecPrime Solutions, administrador da comunidade nopCommerce Brasil, e autor dos sites InvestFacil.net e Desenvolvedores.ninja

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *