Siga-nos em...
Follow us on Twitter Follow us on Facebook Watch us on YouTube
Registro


HGIDC
Resultados 1 a 2 de 2
  1. #1

    Avatar de 14biss
    Data de Ingresso
    Jul 2010
    Localização
    Maceió
    Idade
    23
    Posts
    131
    Agradecido
    12
    Agradeceu
    8
    Peso da Avaliação
    11

    Padrão Criando um sistema de cache

    Cache é uma forma de armazenar um valor para um consulta futura mais rápida. Com o cache conseguimos otimizar o carregamento dos sites e de suas informações.

    Suponhamos que você tenha um site que faça uma consulta em um tabela do banco de dados que possua 3.000.000 registros e essa consulta demore mais de 30 segundos (acredite, isso acontece). Com o cache você pode reduzir esse tempo em alguns segundos.

    Cachear uma informação significa salvá-la em algum lugar (seja em um arquivo ou diretamente na memória RAM do servidor) para depois poder consultar essa informação sem ter que obtê-la da forma mais demorada (no exemplo a cima, com a consulta ao banco de dados).

    Vamos criar aqui uma classe que servirá para armazenar qualquer tipo de texto, variável, número inteiro, resultado SQL e etc.

    Código PHP:
    <?php
     
    /**
     * Sistema de cache
     *
     * @author Thiago Belem
     */
    class Cache {
            private static 
    $time '5 minutes'//Tempo padrão de cache
           
            
    private $folder//Local onde o cache será salvo | Definido pelo construtor
     
            /**
             * Construtor
             *
             * Inicializa a classe e permite a definição de onde os arquivos
             * serão salvos. Se o parâmetro $folder for ignorado o local dos
             * arquivos temporários do sistema operacional será usado
             *
             * @uses Cache::setFolder() Para definir o local dos arquivos de cache
             *
             * @param string $folder Local para salvar os arquivos de cache (opcional)
             *
             * @return void
             */
            
    public function __construct($folder null) {
                    
    $this->setFolder(!is_null($folder) ? $folder sys_get_temp_dir());
            }
           
            
    /**
             * Define onde os arquivos de cache serão salvos
             *
             * Irá verificar se a pasta existe e pode ser escrita, caso contrário
             * uma mensagem de erro será exibida
             *
             * @param string $folder Local para salvar os arquivos de cache (opcional)
             *
             * @return void
             */
            
    protected function setFolder($folder) {
                    
    // Se a pasta existir, for uma pasta e puder ser escrita
                    
    if (file_exists($folder) && is_dir($folder) && is_writable($folder)) {
                            
    $this->folder $folder;
                    } else {
                            
    trigger_error('Não foi possível acessar a pasta de cache'E_USER_ERROR);
                    }
            }
           
            
    /**
             * Gera o local do arquivo de cache baseado na chave passada
             *
             * @param string $key Uma chave para identificar o arquivo
             *
             * @return string Local do arquivo de cache
             */
            
    protected function generateFileLocation($key) {
                    return 
    $this->folder DIRECTORY_SEPARATOR sha1($key) . '.tmp';
            }
           
            
    /**
             * Cria um arquivo de cache
             *
             * @uses Cache::generateFileLocation() para gerar o local do arquivo de cache
             *
             * @param string $key Uma chave para identificar o arquivo
             * @param string $content Conteúdo do arquivo de cache
             *
             * @return boolean Se o arquivo foi criado
             */
            
    protected function createCacheFile($key$content) {
                    
    // Gera o nome do arquivo
                    
    $filename $this->generateFileLocation($key);
                   
                    
    // Cria o arquivo com o conteúdo
                    
    return file_put_contents($filename$content)
                            OR 
    trigger_error('Não foi possível criar o arquivo de cache'E_USER_ERROR);
            }
           
            
    /**
             * Salva um valor no cache
             *
             * @uses Cache::createCacheFile() para criar o arquivo com o cache
             *
             * @param string $key Uma chave para identificar o valor cacheado
             * @param mixed $content Conteúdo/variável a ser salvo(a) no cache
             * @param string $time Quanto tempo até o cache expirar (opcional)
             *
             * @return boolean Se o cache foi salvo
             */
            
    public function save($key$content$time null) {
                    
    $time strtotime(!is_null($time) ? $time self::$time);
                           
                    
    $content serialize(array(
                            
    'expires' => $time,
                            
    'content' => $content));
                   
                    return 
    $this->createCacheFile($key$content);
            }
           
           
            
    /**
             * Salva um valor do cache
             *
             * @uses Cache::generateFileLocation() para gerar o local do arquivo de cache
             *
             * @param string $key Uma chave para identificar o valor cacheado
             *
             * @return mixed Se o cache foi encontrado retorna o seu valor, caso contrário retorna NULL
             */
            
    public function read($key) {
                    
    $filename $this->generateFileLocation($key);
                    if (
    file_exists($filename) && is_readable($filename)) {
                            
    $cache unserialize(file_get_contents($filename));
                            if (
    $cache['expires'] > time()) {
                                    return 
    $cache['content'];
                            } else {
                                    
    unlink($filename);
                            }
                    }
                    return 
    null;
            }
    }
     
    ?>
    Usando o sistema de cache
    Veja um exemplo de uso do sistema de cache onde primeiro verificamos se há um valor armazenado no cache e, se não houver, geramos o valor novamente e salvamos ele no cache para futuras verificações:
    Código PHP:
    <?php
    // Verifica se a frase já está no cache
    $cache = new Cache();
    $frase $cache->read('frase-dia');
    // Se não houver frase no cache ou já tiver expirado
    if (!$frase) {
        
    // Cria uma nova frase e salva-a no cache por 30s
        
    $frase 'CALMA! O sábio jamais se aborrece ('date('H:i:s') .')';
        
    $cache->save('frase-dia'$frase'30 seconds');
    }
    echo 
    "<p>{$frase}</p>";
    ?>
    Fonte: Blog Thiago Belem

    break $this->Fuck();

  2. #2


    Avatar de viOleNt
    Data de Ingresso
    Oct 2010
    Localização
    Atibaia - SP
    Idade
    27
    Posts
    406
    Agradecido
    349
    Agradeceu
    132
    Peso da Avaliação
    12

    Padrão

    cara fikei procurando isso uns 2 dias seguidos, mais não sabia com qual palavra chave usar para pesquisar, tu não sabe o quanto ajudou postando ^^ eu até tinha visto sobre cache mais não sabia ou melhor não tinha visto um exemplo para saber que era o que precisava

 

 

Informações de Tópico

Usuários Navegando neste Tópico

Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)

Tópicos Similares

  1. |Tutorial| [Iniciante]Criando Easy Sistema De Login e Senha
    Por FusioN no fórum Delphi
    Respostas: 1
    Último Post: 02-09-2011, 12:29 AM
  2. |Tutorial| Criando um Sistema Operacional Básico
    Por FusioN no fórum Tutoriais
    Respostas: 2
    Último Post: 07-03-2011, 11:53 PM
  3. |Tutorial| Criando Sistema de Reborn (2Moons/Dekaron)
    Por daddycool. no fórum Dekaron | 2 Moons
    Respostas: 0
    Último Post: 24-10-2010, 12:24 PM

Marcadores

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •