segunda-feira, 31 de julho de 2017

Output cache no .Net MVC

Hoje aprendi: Possibilidades com output cache do .Net MVC


O OutputCache, na verdade já utilizei, mas como nunca escrevi sobre e recentemente utilizei no TCC da pós, resolvi escrever.

OutputCache é uma classe do namespace System.Web.Mvc (sim, não podemos usar na Web Api, mas nada que isso não resolva).  Basicamente a proposta é permitir que possamos configurar um cache para um determinado Action da nossa Controller. 

Mais ou menos isso:









Entre as diferentes configurações que podemos usar está o Duration, que recebe o valor da duração do cache em segundos  (após esse tempo o Action executa novamente e atualiza novamente o cache) ou o Location que recebe um enumerador com algumas configurações para indicar onde pretendemos gerar o cache (Client, Server, None, etc...). Existem outras configurações, mas para aplicações corporativas, é basicamente isso que usamos.

Quando habilitamos o cache em uma Action, com as configurações da imagem apresentada no post, estamos garantindo que dentro de 3600 segundos (uma hora), o código que está dentro do "{" e "}" não será reprocessado para retornar ao client. Quando a requisição chegar (e o cache estiver valido), o cliente imediatamente receberá os dados armazenados no cache por alguma requisição anterior (dentro do período de 3600 segundos).

domingo, 30 de julho de 2017

Cache em web api

Hoje aprendi: Cache em Web Api usando Memory Cache


Eu estava buscando algo pra representar no meu TCC como uma solução de cache para a minha API. Sabemos que OutputCache pertence ao namespace System.Web.Mvc, portanto, não podemos trabalhar com ele na Web Api. Então me veio a pergunta: O que eu posso usar para aplicar um cache nas operações da minha web api ?

Foi então que encontrei o artigo do Renato Groffe sobre o novo mecanismo de cache do Asp.Net 5 e resolvi testar para mencionar no TCC.

Abri o Visual Studio e criei uma POC simples para entender o comportamento do MemoryCache (que pertence ao namespace System.Runtime.Caching). A POC ficou assim:






Então, criamos um método para configurar o cache utilizando como referencia o MemoryCache.Default. A partir dele configuramos um tempo para expirar o cache, adicionamos os dados que queremos cachear no value do AddOrGetExisting() e retornamos o valor desse método (que é basicamente o que armazenamos em uma execução anterior).

É bem bacana e olhando para os sistemas que desenvolvemos diariamente, certamente podemos observar várias situações onde cabe um cache. Eu curti :)