Loading:

Ferie zimowe - 3 za 2

cache zapytań SQL do pliku txt - zaspisanie wyników z bazy do pliku w php

Świetna mała biblioteka służąca do zapisywania wyników  zapytań z bazy do pliku TXT, dzięki temu odciążamy baze co ma kluczowe zaczenie wprzy dużysz obciążeniach serwisu.


Strona projektu: http://www.rooftopsolutions.nl/article/107

 

Zasada działania jest prosta przed wywołaniem zapytania sprawdzamy czy w katalogu s_cache nie ma pliku dla zapytania z takim kluczem w naszym wypadku klucz to getUsers:selectAll moze on miec dowolną wartość np zobaczUserow itd,

jeśli nie ma pliku wykonujemy zapytanie a jago wynik zapisujemy do katalogu s_cache

jeśli jest i nie jest już nie aktualny to pobieramy wynik z pliku a nie z bazy


Jak widac zasada jest prosta a daje ogromne wyniki przy optymalizacji

 

Użycie:

<?php

 // konstrukcja silnika cache
$cache = new Sabre_Cache_Filesystem();

//tutatj funkcja np do pobrania użytkowników
function getUsers() {

    global $cache;

    // unikalny kod dla tego zapytania
    $key = 'getUsers:selectAll';

    // sprawdzić, czy dane nie są już w pamięci cache
    if (!$data = $cache->fetch($key)) {
       //nie istnieje wersja z pamięci podręcznej, pobieramy dane z bazy

       $db = new mysqli('localhost','nazwa_usera','haslo','nazwa_tabeli');
       $zapytanie = "SELECT * FROM users  ORDER BY RAND() LIMIT 30";
       $wynik = $db->query($zapytanie);
           
           while($wiersz = $wynik->fetch_assoc()) { $data[] = $wiersz; }
           
       // czas życia cahce 10 min (w sekundach)
       $cache->store($key,$data,600);
    }
    return $data;
}

$users = getUsers();
print_r($users);
?>

 



Napisz Artykuł

Listing


//--------------KOD BIBLIOTEKI

<?php

abstract class Sabre_Cache_Abstract {

        abstract function fetch($key);
        abstract function store($key,$data,$ttl);
        abstract function delete($key);

    }


class Sabre_Cache_Filesystem extends Sabre_Cache_Abstract {

  // To jest funkcja do przechowywania informacji o:
  function store($key,$data,$ttl) {

    // Otwarcie pliku w trybie do  odczytu / zapisu
    $h = fopen($this->getFileName($key),'a+');
    if (!$h) throw new Exception('Nie moge zapisach cache');

    flock($h,LOCK_EX); // blokada wyłączna, uwolnić, gdy plik jest zamknięty

    fseek($h,0); // przejść do początku pliku

    // obcina plik
    ftruncate($h,0);

    // Serializacja wraz z TTL (czas potrzebny na wygaśnięcie cache)
    $data = serialize(array(time()+$ttl,$data));
    if (fwrite($h,$data)===false) {
      throw new Exception('Nie moge zapisach cache');
    }
    fclose($h);

  }

  // Funkcja pobierania danych zwraca FALSE w przypadku porażki
  function fetch($key) {

      $filename = $this->getFileName($key);
      if (!file_exists($filename)) return false;
      $h = fopen($filename,'r');

      if (!$h) return false;

      // pierwsza blokada
      flock($h,LOCK_SH);

      $data = file_get_contents($filename);
      fclose($h);

      $data = @unserialize($data);
      if (!$data) {

         //Jeśli unserialize nie powiodło się usuwamy plik
         unlink($filename);
         return false;

      }

      if (time() > $data[0]) {

         // usuwamy plik z cache który jest już stary
         unlink($filename);
         return false;

      }
      return $data[1];
   }

   function delete( $key ) {

      $filename = $this->getFileName($key);
      if (file_exists($filename)) {
          return unlink($filename);
      } else {
          return false;
      }

   }

  private function getFileName($key) {

      return 's_cache/s_cache'.md5($key);

  }

}

?>
 


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5055

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: igor
Ranga: Administrator serwisu Punktów: 28716
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors