Loading:


    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);

      }

    }

    ?>
     




    Dodano przez: igor
    Ranga: Administrator serwisu Punktów: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors