Zend_Cache-Introduction.xml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <sect1 id="zend.cache.introduction">
  2. <title>Introducere</title>
  3. <para>
  4. <code>Zend_Cache</code> oferă un mod generic de a stoca temporar orice fel de date.
  5. </para>
  6. <para>
  7. Stocarea temporară a datelor (caching) este operată în Zend Framework de interfeţe (frontend), în timp ce stocarea înregistrărilor se face prin adaptoare (backend adapters).
  8. (<code>File</code>, <code>Sqlite</code>, <code>Memcache</code>...) cu ajutorul unui sistem flexibil de
  9. ID-uri şi etichete. Folosind aceste adaptoare, vă va fi uşor să ştergeţi ulterior tipuri specifice de înregistrări
  10. (de exemplu: „şterge toate înregistrările memorate marcate cu o etichetă dată”).
  11. </para>
  12. <para>
  13. Nucleul modulului (<code>Zend_Cache_Core</code>) este generic, flexibil şi configurabil.
  14. Totuşi, pentru nevoi specifice, există interfeţe care extind <code>Zend_Cache_Core</code>
  15. pentru convenienţă: <code>Output</code>, <code>File</code>, <code>Function</code> şi <code>Class</code>.
  16. </para>
  17. <example>
  18. <title>Obţinerea unei interfeţe (frontend) cu <code>Zend_Cache::factory()</code></title>
  19. <para>
  20. <code>Zend_Cache::factory()</code> creează instanţe ale obiectelor şi face legătura între ele.
  21. În acest prim exemplu, vom folosi interfaţa <code>Core</code> împreună cu adaptorul <code>File</code>
  22. .
  23. </para>
  24. <programlisting role="php"><![CDATA[<?php
  25. require_once 'Zend/Cache.php';
  26. $frontendOptions = array(
  27. 'lifetime' => 7200, // timp de viaţă pentru înregistrări de 2 ore
  28. 'automatic_serialization' => true
  29. );
  30. $backendOptions = array(
  31. 'cache_dir' => './tmp/' // Directorul unde se pun fişierele cache
  32. );
  33. // getting a Zend_Cache_Core object
  34. $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);?>]]>
  35. </programlisting>
  36. </example>
  37. <note>
  38. <title>Frontend şi backend construit din mai multe cuvinte</title>
  39. <para>
  40. Numele unor interfeţe şi backend-uri este construit din mai multe
  41. cuvinte, cum ar fi „ZendPlatform”. Când le specificaţi fabricii,
  42. separaţi-le cu un separator cum ar fi spaţiu („ ”), liniuţă („-”)
  43. sau punct („.”).
  44. </para>
  45. </note>
  46. <example id="zend.cache.introduction.example-2">
  47. <title>Păstrarea în cache a unui rezultat de interogare</title>
  48. <para>
  49. Acum că avem o interfaţă, putem stoca orice tip de date (am pornit serializarea). De
  50. exemplu, putem stoca un rezultat al unei interogări foarte complexe în baza de date. După ce este stocat, nu
  51. mai este nevoie nici măcar să ne conectăm la baza de date; înregistrările sunt preluate din
  52. </para>
  53. <programlisting role="php"><![CDATA[<?php
  54. // $cache a fost iniţializat în exemplul anterior
  55. // vezi dacă obiectul este deja în cache
  56. if(!$result = $cache->load('myresult')) {
  57. // nu e în cache, se face o conexiune la baza de date
  58. $db = Zend_Db::factory( [...] );
  59. $result = $db->fetchAll('SELECT * FROM huge_table');
  60. $cache->save($result, 'myresult');
  61. } else {
  62. // e în cache, hai să ne lăudăm cu asta
  63. echo "This one is from cache!\n\n";
  64. }
  65. print_r($result);?>]]>
  66. </programlisting>
  67. </example>
  68. <example id="zend.cache.introduction.example-3">
  69. <title>Punerea în cache a textelor afişate cu interfaţa de ieşire din <code>Zend_Cache</code></title>
  70. <para>
  71. Marcăm secţiuni în care dorim să punem în cache textele care vor fi afişate adăugând nişte condiţii,
  72. mai exact încapsulăm fiecare secţiune între metodele <code>start()</code> şi <code>end()</code>
  73. </para><para>
  74. În secţiune, afişaţi datele în mod normal - tot ceea ce este afişat va fi pus în cache în loc să fie afişat
  75. până când este executată metoda <code>end()</code> (este poate cel mai util exemplu de a folosi această clasă).
  76. La următoarea rulare, codul din secţiune nu va mai fi executat, rezultatul aflându-se deja în cache
  77. (cu condiţia ca înregistrarea din cache să fie validă).
  78. </para>
  79. <programlisting role="php"><![CDATA[<?php
  80. $frontendOptions = array(
  81. 'lifetime' => 30, // timpul de viaţă este jumătate de minut
  82. 'automatic_serialization' => false // valoarea false este implicită oricum
  83. );
  84. $backendOptions = array('cacheDir' => './tmp/');
  85. $cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);
  86. // pasăm un identificator unic metodei start()
  87. if(!$cache->start('mypage')) {
  88. // afişare normală:
  89. echo 'Salut lume! ';
  90. echo 'Acest mesaj este păstrat temporar ('.time().') ';
  91. $cache->end(); // ieşirea este salvată şi trimisă navigatorului
  92. }
  93. echo 'Acest text nu este păstrat în cache niciodată ('.time().').';?>]]>
  94. </programlisting>
  95. <para>
  96. Notaţi că afişăm rezultatul funcţiei <code>time()</code> de două ori; o facem în scop
  97. demonstrativ. Încercaţi să reîmprospătaţi pagina de mai multe ori; veţi vedea că primul
  98. număr nu se schimbă în timp ce al doilea se schimbă pe măsură ce trece timpul. Acest
  99. lucru se întâmplă pentru că primul număr a fost salvat în cache şi este citit de acolo la a doua
  100. accesare. După jumătate de minut (am setat timpul de expirare la 30 de secunde) numerele
  101. ar trebui să se potrivească din nou pentru că înregistrarea din cache a expirat -- doar pentru ca
  102. rezultatul să fie din nou pus în cache. Ar trebui să încercaţi codul acesta în navigator sau în consolă.
  103. </para>
  104. </example>
  105. <note><para>
  106. Când folosiţi Zend_Cache, fiţi atenţi la identificatorul de cache (pasat metodei <code>save()</code>
  107. şi metodei <code>start()</code>). Trebuie să fie unic pentru fiecare resursă pe care o puneţi în cache,
  108. altfel înregistrările se vor suprapune, sau se vor şterge reciproc.
  109. </para></note>
  110. </sect1>
  111. <!--
  112. vim:se ts=4 sw=4 et:
  113. -->