Ce metode de cache, altele decât fișierele sau baza de date, sunt disponibile?

În prezent, știu doar două moduri de a cache-uri de date (folosesc PHP, dar presupun că același lucru se va aplica și în majoritatea limbilor).

  1. Salvați memoria cache într-un fișier
  2. Salvați memoria cache într-un câmp DB mare

Există alte moduri de caching (poate mai bune) sau este chiar simplu acest lucru?

0
fr hi bn
Puteți da această întrebare un titlu adecvat? De exemplu. "Care sunt cele mai bune metode de stocare a datelor în cache?", "Ce metode de cache, altele decât fișierele sau baza de date, sunt disponibile?" Sau similare.
adăugat autor Bobby Jack, sursa

4 răspunsuri

De asemenea, puteți memora cache-ul în memorie, care este mult mai eficient. Încercați să memcached .

0
adăugat

Poate doriți să specificați în mod explicit mai precis ce doriți să memorați în memoria cache. Aveți toate aceste posibilități de a cache:

  • Accessing the Data Base where you cache the data first correctly tuning your RDBMS, then using a layer to delegate the decision to detect multiple queries for the same data (with AdoDB for example.)
  • Extracting calculations from loops in the code so you don't compute the same value multiple times. Here your third way: storing results in the session for the user.
  • Precompiling the PHP code with an extension like APC Cache. This way you don't have to compile the same PHP code for every request.
  • The page sent to the user making sure you're setting the right META tags (do a good thing for the world and don't use ETL at least absolutly necessary); or maybe making dynamic pages completely static (having a batch process that generates .html pages); or by using a proxy cache like Squid.
  • Prefetching and by this I refer all those opportunities you have to improve the user experience just by doing things while the user don't look your way. For example, preloading IMG tags in the HTML file, tunning the RDBMS for prefectching, precomputing results storing complex computations in the database, etc.

Din experiența mea, te-aș paria că codul tău poate fi îmbunătățit mult înainte de a începe să vorbim despre lucrurile de caching. Luați în considerare, de exemplu, cât de bine structurat este navigarea site-ului dvs. și cât de bine controlați experiența utilizatorului. Apoi verificați codul cu un instrument ca XDebug .

Verificați, de asemenea, cât de bine realizați interogările SQL și cât de bine indexați tabelele. Apoi, verificați codul din nou pentru a căuta oportunități de a aplica regula "citiți de mai multe ori, dar scrieți doar o singură dată"

Utilizați un instrument simplu, cum ar fi YSlow , pentru a sugera alte lucruri simple de îmbunătățit. Verificați din nou codul în căutarea oportunităților de a pune logica în browser (prin JavaScript)

0
adăugat

În al doilea rând memcached, face lucrurile simple și poate merge distributiv și tot ce jazz, dacă aveți nevoie de ea prea

0
adăugat

Dacă utilizați Apache, puteți utiliza mod_rewrite pentru a vă arhiva în cache paginile dvs. web. Să presupunem că utilizați PHP și că aveți o solicitare pentru "/somepage.php". În fișierul .htaccess introduceți următoarele:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

În cazul în care memoria cache se stinge în gol, cererea este gestionată de scriptul PHP ca de obicei, deci acum este pur și simplu o chestiune de a face script-ul PHP să stocheze html rezultatul în memoria cache. Cea mai simplă modalitate de a face acest lucru este folosirea unei alte reguli htaccess pentru a prependa sfârșitul adăugați câteva fișiere PHP la toate cererile PHP (aceasta poate sau nu ar fi o idee bună, în funcție de aplicația dvs.):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Atunci ai face ceva de genul asta:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

Cu câteva expresii regulate suplimentare în fișierul .htaccess, am putea să începem, probabil, și cererea de șir de cereri de cache, dar voi lăsa asta ca un exercițiu pentru cititor :)

0
adăugat