Adicionando dados na memória

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.

Image

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:

  1. Usar simples dados
  2. User objetos
  3. User classes customiz√°veis
  4. Informar o tamanho para ser colocado na memória
  5. 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.