Olá pessoal, meu nome é Mauricio Junior e hoje eu vou falar e mostrar como colocar dados na memória de um jeito fácil e que facilita a busca de forma rápida. Lembro que todo o código fonte está em meu repositório online no GitHub para fazer download gratuitamente.
O que eu utilizei?
- Ferramenta: Visual Studio ou Rider
- NuGet Package: MemoryCacheLibrary
- Tipo: Console application
O problema
Em alguns momentos no desenvolvimento de software é necessário buscar dados a todo tempo e a maioria dos dados não tem a possibilidade de mudar por um longo tempo, as vezes dias. Isso depende muito dos dados que precisamos e isso pode custar tempo e dinheiro no caso de ir ao database a todo momento. Lembro que é necessário sempre verificar o tempo de atualização do dado dentro da aplicação.
Solução
Utilizar o framework MemoryCacheLibrary criado por mim Mauricio Junior para colocar qualquer tipo de objeto em memória e ao invés de gastar alguns segundos fazendo requisição dos dados, o framework gast milesegundos para buscar os dados em memória através da chave difinida.
Vamos codificar?
O primeiro passo é criar um projeto do tipo console application e depois vai para o NuGet e faça download do pacote MemoryCacheLibrary, veja a figura 1.
Figura 1 – Install the package MemoryCacheLibrary
Depois de instalar o pacote, image ter uma lista de string que vem do database todos os dias quando o usuário consulta ou acessa alguma página.
Código 1 – Lista de string
var states = new List<string>
{
“Miami”,
“Illinois”,
“New York”,
“Texas”,
“California”,
“Georgia”,
“Washington”,
“Alaska”,
“Hawaii”,
“Virginia”,
“New Jersey”,
“Pennsylvania”,
“North Carolina”,
“Colorado”,
“Arizona”,
“Ohio”,
“Michigan”,
“Minnesota”
};
Depois dessa lista, vou usar a biblioteca para colocar em memória os dados.
Código 2 – Usando a biblioteca
//memory cache library
var memory = new MemoryCacheLibrary.Main();
//set values
memory.SetCache(“myStates”, states);
No código 2, para adicionar os valores basta colocar uma chave e a variável que precisa para colocar em memória. Quando nenhuma informação é passada sobre tempo e tamanho, o framework usa como padrão o tamanho de 1024 e o tempo de 10 minutos.
Para pegar os dados, é necessário usar o método GetCache passando a chave necessária adicionada anteriormente. O código 3 mostra sobre isso.
Código 3 – Pegando os dados da memória
//get values
var _states = memory.GetCache(“myStates”) as List<string>;
foreach(var state in _states)
{
Console.WriteLine(state);
}
O código 4 mostra como adicionar os dados com um tempo maior para permanecer na memória.
Código 4 – Adicionando mais tempo.
//set values with 8 hours
memory.SetCache(“myStates”, states, 8, 0, 0);
No código 4, o framework vai adicionar os dados por 8 horas na memória, você pode ver mais opções dentro do método SetCache.
Adicionando classes customizadas na memória
Você pode colocar bem mais do que você necessita na memória, por exemplo uma Model. O código 5 eu crio a Model e coloco os valores.
Código 5 – UserModel.cs
public class UserModel
{
public int IdUser { get; set; }
public string NameUser { get; set; }
public string EmailUser { get; set; }
}
//using custom class
var user = new UserModel
{
IdUser = 1,
NameUser = “Mauricio Junior”,
EmailUser = “a@a.com”
};
//set values
memory.SetCache<UserModel>(“myUsers”, user);
Note que no código 5 uma classe nova foi criada, valores foram adicionados e depois usei no método SetCache<UserModel> e lá dentro do método será feito a mágina para colocar a classe na memória.
Agora eu posso pegar esses dados usando a chave “myUsers” do mesmo jeito, veja o código 6.
Código 6 – Pegando o cache na memória
var _users = memory.GetCache<UserModel>(“myUsers”);
Console.WriteLine(_users.NameUser);
Note que agora eu utilizei o GetCache<UserModel> passando a minha chave e logo em seguida eu já posso pegar o nome do usuário pela propriedade.
Para finalizar, você pode usar objetos simples também como strings.
Código 7 – Usando simples strings
var simpleSite = “www.mauriciojunior.net”;
memory.SetCache(“site”, simpleSite);
Console.WriteLine(memory.GetCache(“site”));
Lembro que o framework é customizável e você pode:
- Usar simples dados
- User objetos
- User classes customizáveis
- Informar o tamanho para ser colocado na memória
- Informar o tempo que quer deixar o dado na memória (horas, minutos e segundos).
Espero que tenha gostado e eu fico por aqui. Qualquer dúvida pode entrar em contato comigo para mais informações através do site www.mauriciojunior.net.