Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Struktura Cachowania
Avatarus
post
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

Ostrzeżenie: (0%)
-----


Witam
Dużo się naczytałem ostatnio o cachowaniu itp.
Chciałbym to napisać SAM, tylko mam problem z jedną kwestią (w sumie najważniejszą (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )
Jak zrobić sprawdzanie czy dane w pliku cache są nowsze od tych w bazie?

Prosiłbym o nie pisanie postów stylu " głupi porywa się z motyką na słońce" itp ...Jeśli wskażecie mi metody jak to zrobić to sobie poradzę.
Po prostu logicznie nie potrafię sobie tego efektywnie wyobrazić. A może dlatego że od 5 jestem na nogach...z tego głównie na uczelni (kocham SESJE (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Avatarus
post
Post #2





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

Ostrzeżenie: (0%)
-----


no racja, czasem faktycznie mózg uśmierca szare komórki skoro nie wpadłem na to wcześnie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Co do bibliotek to raczej staram się z nich nie korzystać jeśli są to duże biblioteki tak jak te Zend Framework. Skoro mogę napisać coś (z wasza pomocą oczywiście) co waży dużo mniej to chyba to lepsze dla serwisu.

Znalazłem dość fajny i kompaktowy skrypt cache.
Czy użylibyście takiego skryptu?

Plik sterownik.php
  1. <?php
  2.  
  3.  define('CACHE_DIR', './sql_cache/');
  4.  
  5.  class sql{
  6. var $connection;
  7. var $result;
  8. var $rows;
  9.  
  10. var $queries = 0;
  11.  
  12. var $cache_state =0;
  13. var $cache_file;
  14. var $cache_buffer;
  15. var $cache_ptr;
  16.  
  17. function sql_connect($host, $user, $pass, $db){
  18.  $this -> connection = mysql_connect($host, $user, $pass);
  19. }
  20.  
  21. function sql_close(){
  22.  mysql_close($this -> connection);
  23. }
  24. function sql_cache($handle = 0){
  25.  if(is_string($handle)){
  26. if(file_exists(CACHE_DIR.'xxx_'.$handle.'.666')){
  27.  $this -> cache_state  = 1;
  28.  $this -> cache_ptr = 0;
  29.  $this -> cache_buffer = unserialize(file_get_contents(CACHE_DIR.'xxx_'.$handle.'.666'));
  30. }else{
  31.  $this -> cache_state = 2;
  32.  $this -> cache_buffer = array();
  33.  $this -> cache_file = CACHE_DIR.'xxx_'.$handle.'.666';
  34. }
  35.  }else{
  36. if($this -> cache_state == 2){
  37.  file_put_contents($this -> cache_file, serialize($this -> cache_buffer));
  38. }
  39. $this -> cache_state = 0;
  40.  }
  41. }
  42. function sql_cache_remove($handle){
  43.  if(file_exists(CACHE_DIR.'xxx_'.$handle.'.666')){
  44. unlink(CACHE_DIR.'xxx_'.$handle.'.666');
  45.  }
  46. }
  47. function sql_query($query){
  48.  if($this -> cache_state != 1){
  49. $this -> result = mysql_query($query);
  50. $this -> queries++;
  51.  
  52. if(mysql_errno() != 0){
  53.  die('Error: '.mysql_error().'<br/>');
  54. }
  55. return 1;
  56.  }
  57. }
  58. function sql_fetch_array(){
  59.  if($this -> cache_state == 1){
  60. if(!isset($this -> cache_buffer[$this -> cache_ptr])){
  61.  return 0;
  62. }
  63. $this -> rows = $this -> cache_buffer[$this -> cache_ptr];
  64. $this -> cache_ptr++;
  65. return 1;
  66.  }else{
  67. if($this -> rows = mysql_fetch_assoc($this -> result)){
  68.  if($this -> cache_state == 2){
  69. // Dodaj do cache
  70. $this -> cache_buffer[] = $this -> rows;
  71.  }
  72.  return 1;
  73. }
  74.  }
  75.  return 0;
  76. }
  77.  
  78. function sql_fetch_row(){
  79.  if($this -> cache_state == 1){
  80. // czy koniec bufora?
  81. if(!isset($this -> cache_buffer[$this -> cache_ptr])){
  82.  return 0;
  83. }
  84. // odczytaj z bufora
  85. $this -> rows = $this -> cache_buffer[$this -> cache_ptr];
  86. $this -> cache_ptr++;
  87. return 1;
  88.  }else{
  89. if($this -> rows = mysql_fetch_row($this -> result)){
  90.  if($this -> cache_state == 2){
  91. // Jeśli tworzymy cache, musimy rekord dodatkowo zapisac w buforze
  92. $this -> cache_buffer[] = $this -> rows;
  93.  }
  94.  return 1;
  95. }
  96.  }
  97.  return 0;
  98. }
  99.  
  100.  } // koniec klasy
  101. ?>


Plik który używa cache.
  1. <?php
  2.  
  3.  require('./sterownik.php');
  4.  
  5.  $sql = new sql;
  6.  
  7.  $sql -> sql_connect('localhost', 'root', '', 'test');
  8.  
  9.  $sql -> sql_cache('uchwyt');
  10.  $sql -> sql_query('SELECT * FROM phpbb_topics');
  11.  
  12.  while($sql -> sql_fetch_row()){
  13. echo $sql -> rows[0].' - '.$sql -> rows[1].'<br/>';
  14.  }
  15.  $sql -> sql_cache();
  16.  
  17.  $sql -> sql_close();
  18. ?>


no dobra cache już działa i sprawuje się bardzo dobrze. Mam jednak pytanie czy powyższy kod da się jakoś "dopieścić"
Gdzieś czytałem o jakimś PHP hypercacher czy cóś. Tam podobno wykorzystuje się kompresje i bufory. Czy tutaj da się to zastosować?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 08:20