terça-feira, 7 de janeiro de 2014


Post Sobre armazenamento de objetos em um Cache

o que é um cache?

Nos dias atuais cada vez mais acessamos sites, usamos banco de dados, e nossos proprios

computadores tem grande capacidade de armazenamento de processamento.Com a finalidade

de agilizar essas consultas e processamentos que existe a memoria cache, sendo uma

memoria de acesso muito rapido, que guarda pequenas quantidades de informações, as mais

acessadas por nós, seja em sites, no nosso HD ou ate mesmo um banco de dados.


Tipos mais típicos de cache

Como falado anteriormente, alguns tipos mais tipicos de caches sao:

1-Cache de sites: são caches guardados pelo navegador que usamos, guardam informaçoes

de uma pagina que visitamos na web, para que ao acessa-las novamente nao precisamos

carregar a pagina completamente, e sim informaçoes que foram atualizadas nela, assim

agilzando o processo de carregamento.

2-Cache no processador: uma memoria de alto desenpenho que fica embutida dentro do

processador, é utilizada para que o processador acesse dados mais rapidos, evitando a

busca na memoria ram que é mais lenta.Normalmente utilizada em 3 niveis no processador.
Nivel L1, L2 e alguns processadores chegam a ter o nivel L3.

3- Cache do disco : fica localizada junto ao disco rigido do nosso computador, ela

armazena as ultimas trilhas feita pelo HD assim evitando que a cabeça de leitura e

gravação passe varias vezes pelo mesmo lugar.


Características de um cache:
E uma memoria de velocidade de leitura e escrita muito mais rapido, por isso é

utilizado para armazenar dados que são lidos ou gravados varias vezes.
Possui um tempo de vida, assim nada fica sempre armazenado no cache para sempre.

Sobre meu projeto:

Bom, tendo explicado um pouco sobre memoria cache, vou mostrar um pouco do meu projeto

de cache, mostrando os codigos em java, o projeto tem como finalidade criar um toolkit

que atraves de anotaçoes feitas por quem desenvolve uma classe seja colocado na memoria

ram utilizada pela maquina virtual do java, assim evitando por exemplo o acesso a um

banco de dados utilizado por um sistema.



Alguns Métodos da minha classe cache :

Essa classe manipula o cache, ela possui um objeto cache estatico que só pode ser

instancia dentro dela mesmo, e todos os metodos necessario para adicionar, remover,ou

até mesmo limpar todo o cache.

verifica se uma chave existe :
   
      public  boolean hasKey(String chave){
 boolean chaveExisteNoCache = true;
 if(chaveEhValida(chave)&&temEssaChaveNaListaDeObjetos(chave)) return chaveExisteNoCache;
 return  chaveExisteNoCache=false;
      }


retorna um objeto do cache :
     
 public Object get(String chave){
  
  if(chaveEhValida(chave)==false){
   System.out.println("chave invalida");
   return chave;
  }
  if(temEssaChaveNaListaDeObjetos(chave)==false){
   System.out.println("objeto inexistente na lista");
   return chave;
  }
  
  
  Object objeto = listaObjetosNoCache.get(chave);
  return objeto;
 }

metodo que adiciona um objeto no cache :
/**
    
 public  void add(String chave,Object objeto,int tempo){
  
  if(chaveEhValida(chave) && validaObjeto(objeto)){
   addChaveObjetoNoCache(chave,objeto);
   addChaveParaMonitorar(chave,tempo);
  }
  
  
 }


metodo altera o tempo de um objeto no cache :
public void alteraTempoDoObjeto(String chave,int tempoEmMinutos){
    if(chaveEhValida(chave)&&(temEssaChaveNaListaDeObjetos(chave))){
       long novoTempo = calculaTempoDeDuracaoNoCache(tempoEmMinutos);
       atualizaTempoDaChave(chave, novoTempo);
       System.out.println("tempo alterado da chave para : "+tempoEmMinutos +" minutos");
    }
    else System.out.println("chave invalida ou objeto inexistente no cache ");
}



Devido ao tamanho da classe deixo os outros métodos para outra hora : )

Abaixo sobre a classe da anotação:

Anotação que inclui um objeto no cache feita em cima de um metodo, por meio de uma

interface, é uma anotaçao que deve ser inserida em um metodo de uma interface, que sera

reconhecida pelo metodo proxy utilizado na classe cache.

package cache;

/**
 *Classe utilitaria para anotar metodos que serao inseridos no cache da JVM
 *@author Andrei Garcia (andrei_garcia2@hotmail.com)
 *@since JDK.7
*/


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 *Anotação para ser utilizada sobre uma interface ,sendo anotada
 * em cima de um método,metodo o qual sera inserido no cache da JVM seu objeto de 

retorno
 *
 *@author Andrei Garcia
 *@category anotação
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ColocarNoCache {

 int tempo() default 60;


}




Bom era isso, espero que tenham curtido o posto : )





Referencias

http://www.tecmundo.com.br/tira-duvidas/21555
http://pt.wikipedia.org/wiki/Cache

Nenhum comentário:

Postar um comentário