Universelle Caching-Technologie
Datencache: Der hier erwähnte Datencache bezieht sich auf den Datenbankabfragecache. Bei jedem Zugriff auf eine Seite wird zunächst festgestellt, ob die entsprechenden zwischengespeicherten Daten vorhanden sind. Wenn diese nicht vorhanden sind, wird eine Verbindung zur Datenbank hergestellt, die Daten abgerufen und serialisiert Speichern Sie die Abfrageergebnisse in einer Datei, und die gleichen Abfrageergebnisse werden in Zukunft direkt aus der Cache-Tabelle oder -Datei abgerufen.
Das am weitesten verbreitete Beispiel ist die Suchfunktion von Discuz, die die Ergebnis-ID in einer Tabelle zwischenspeichert und bei der nächsten Suche nach demselben Schlüsselwort zuerst die Cache-Tabelle durchsucht.
Wenn mehrere Tabellen verknüpft sind, werden die Inhalte der angehängten Tabelle in einem Feld der Haupttabelle generiert. Bei Bedarf wird das Array zerlegt. Dies hat den Vorteil, dass dies nur eine Tabelle kann gelesen werden, aber der Nachteil besteht darin, dass die Synchronisierung zweier Daten viel mehr Schritte erfordert und die Datenbank immer der Engpass ist. Der entscheidende Punkt ist dabei der Tausch der Festplatte gegen Geschwindigkeit.
Seitencache:
Bei jedem Zugriff auf eine Seite wird zunächst festgestellt, ob die entsprechende zwischengespeicherte Seitendatei vorhanden ist. Wenn diese nicht vorhanden ist, wird eine Verbindung zur Datenbank hergestellt, die Daten abgerufen, die Seite angezeigt und gleichzeitig eine zwischengespeicherte Seitendatei generiert. damit die Auslagerungsdatei beim nächsten Besuch aktiviert wird. (Template Engines und einige gängige Cache-Klassen im Internet verfügen normalerweise über diese Funktion.)
Zeitgesteuerter Cache:
Überprüfen Sie, ob die Datei vorhanden ist und der Zeitstempel kleiner als die festgelegte Ablaufzeit ist. Wenn der Zeitstempel der Dateiänderung größer ist als der aktuelle Zeitstempel abzüglich des Ablaufzeitstempels, verwenden Sie den Cache, andernfalls aktualisieren Sie den Cache.
Inhalt löst Caching aus:
Erzwingen Sie die Aktualisierung des Caches, wenn Daten eingefügt oder aktualisiert werden.
Statischer Cache:
Der hier erwähnte statische Cache bezieht sich auf statische, direkt generierte Textdateien wie HTML oder XML und deren Neugenerierung bei Aktualisierungen. Er eignet sich für Seiten, die sich nicht stark ändern, daher werde ich hier nicht darauf eingehen.
Der obige Inhalt ist eine direkte CP-Lösung für andere Frameworks. Der Inhalt ist fast derselbe und kann auf verschiedene Arten verwendet werden -Side-Caching-Lösung, nicht auf Codeebene, es erfordert die Zusammenarbeit mehrerer Parteien, um dies zu erreichen
Speichercache:
Memcached ist ein leistungsstarkes, verteiltes Speicherobjekt-Caching-System, das zur Reduzierung der Datenbanklast und zur Verbesserung der Zugriffsgeschwindigkeit in dynamischen Anwendungen eingesetzt wird.
Hier ist ein Beispiel für Memcached:
<?php
$memcache = neuer Memcache;
$memcache->connect('localhost', 11211) or die ("Verbindung konnte nicht hergestellt werden");
$version = $memcache->getVersion();
echo „Serverversion: „.$version.“n“;
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die („Fehler beim Speichern der Daten auf dem Server“);
echo „Daten im Cache speichern (Daten verfallen in 10 Sekunden)n“;
$get_result = $memcache->get('key');
echo „Daten aus dem Cache:n“;
var_dump($get_result);
?>
Beispiel für das Lesen der Bibliothek:
<?php
$sql = 'SELECT * FROM user';
$key = md5($sql); //memcached-Objekt-ID
if ( !($datas = $mc->get($key)) ) {
// Wenn zwischengespeicherte Daten nicht in Memcached abgerufen werden, verwenden Sie eine Datenbankabfrage, um den Datensatz abzurufen.
echo "n".str_pad('Daten aus MySQL lesen.', 60, '_')."n";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('test');
$result = mysql_query($sql);
while ($row = mysql_fetch_object($result))
$datas[] = $row;
//Speichern Sie die aus der Datenbank erhaltenen Ergebnissatzdaten im Memcached, um sie beim nächsten Zugriff zu verwenden.
$mc->add($key, $datas);
} anders {
echo "n".str_pad('Daten aus Memcached lesen.', 60, '_')."n";
}
var_dump($datas);
?>
PHP-Puffer:
Es gibt Eaccelerator, APC, PHPA und Xcache. Ich werde nicht viele davon durchsuchen und selbst sehen, ob es so etwas gibt.
MYSQL-Cache:
Dies wird auch als Nicht-Code-Ebene angesehen. Schauen Sie sich die Laufzeit an, die auf der Blue Guy-Tabelle 0.09xxx basiert Um 0,05 S herum soll er es fast ein Jahr lang verändert haben.
[Kunde]
…
Standardzeichensatz=gbk
default-storage-engine=MYISAM
max_connections=600
max_connect_errors=500
back_log=200
Interactive_timeout=7200
query_cache_size=64M
…
table_cache=512
…
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=128M
key_buffer_size=1024M
read_buffer_size=512M
…
thread_concurrency=8
Reverse-Proxy-basiertes Web-Caching:
Wie Nginx, SQUID, mod_proxy (Apache2 und höher sind in mod_proxy und mod_cache unterteilt)
NGINX-Beispiel
<nginx.conf>
#Benutzer niemand;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
worker_rlimit_nofile 10240;
Ereignisse {
benutze epoll;
worker_connections 51200;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
# Serverpool
Upstream-bspfrontsvr {
Server 10.10.10.224:80 Gewicht=1;
Server 10.10.10.221:80 Gewicht=1;
}
Upstream bspimgsvr {
Server 10.10.10.201:80 Gewicht=1;
}
Upstream bspstylesvr {
Server 10.10.10.202:80 Gewicht=1;
}
Upstream bsphelpsvr {
Server 10.10.10.204:80 Gewicht=1;
}
Upstream bspwsisvr {
Server 10.10.10.203:80 Gewicht=1;
}
Upstream-bspadminsvr {
Server 10.10.10.222:80 Gewicht=1;
}
Upstream bspbuyersvr {
Server 10.10.10.223:80 Gewicht=1;
}
Upstream bspsellersvr {
Server 10.10.10.225:80 Gewicht=1;
}
Upstream bsploginsvr {
Server 10.10.10.220:443 Gewicht=1;
}
Upstream-bspregistersvr {
Server 10.10.10.220:80 Gewicht=1;
}
log_format test_com '$remote_addr – $remote_user [$time_local] „$request“ '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" ';
#——————————————————————–
#img.test.com
Server {
Hören Sie 10.10.10.230:80;
Servername img.test.com;
Standort/{
Proxy_Pass http://bspimgsvr ;
include Proxy_setting.conf;
}
access_log logs/img.log test_com;
}
#style.test.com
Server {
Hören Sie 10.10.10.230:80;
Servername style.test.com;
Standort/{
Proxy_Pass http://bspstylesvr ;
include Proxy_setting.conf;
}
access_log logs/style.log test_com;
}
#help.test.com
Server {
Hören Sie 10.10.10.230:80;
Servername help.test.com;
Standort/{
Proxy_Pass http://bsphelpsvr ;
include Proxy_setting.conf;
}
access_log logs/help.log test_com;
}
#admin.test.com
Server {
Hören Sie 10.10.10.230:80;
Servername admin.test.com;
Standort/{
Proxy_Pass http://bspadminsvr ;
include Proxy_setting.conf;
}
access_log logs/admin.log test_com;
}
#buyer.test.com
Server {
Hören Sie 10.10.10.230:80;
Servername Käufer.test.com;
Standort/{
Proxy_Pass http://bspbuyersvr ;
include Proxy_setting.conf;
}
access_log logs/buyer.log test_com;
}
#seller.test.com
Server {
Hören Sie 10.10.10.230:80;
Servername verkäufer.test.com;
Standort/{
Proxy_Pass http://bspsellersvr ;
include Proxy_setting.conf;
}
access_log logs/seller.log test_com;
}
#wsi.test.com
Server {
Hören Sie 10.10.10.230:80;
Servername wsi.test.com;
Standort/{
Proxy_Pass http://bspwsisvr ;
include Proxy_setting.conf;
}
access_log logs/wsi.log test_com;
}
#www.test.com
Server {
Hören Sie 10.10.10.230:80;
Servername www.test.com *.test.com;
Standort ~ ^/NginxStatus/ {
stub_status on;
access_log aus;
}
Standort/{
Proxy_Pass http://bspfrontsvr ;
include Proxy_setting.conf;
}
access_log logs/www.log test_com;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
roothtml;
}
}
#login.test.com
Server {
Hören Sie 10.10.10.230:443;
Servername login.test.com;
SSL ein;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
Standort/{
Proxy_Pass https://bsploginsvr ;
include Proxy_setting.conf;
}
access_log logs/login.log test_com;
}
#login.test.com zur Registrierung
Server {
Hören Sie 10.10.10.230:80;
Servername login.test.com;
Standort/{
Proxy_Pass http://bspregistersvr ;
include Proxy_setting.conf;
}
access_log logs/register.log test_com;
}
}
<conf/proxy_setting.conf>
Proxy_Redirect aus;
Proxy_set_header Host $host;
Proxy_set_header X-Real-IP $remote_addr;
Proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
Proxy_connect_timeout 90;
Proxy_send_timeout 90;
Proxy_read_timeout 90;
Proxy_Buffer_Size 4K;
Proxy_Buffers 4 32k;
Proxy_busy_buffers_size 64k;
Proxy_temp_file_write_size 64k;
Beispiel für mod_proxy:
<VirtualHost *>
Servername www.zxsv.com
ServerAdmin [email protected]
# Reverse-Proxy-Einstellung
ProxyPass / http://www.zxsv.com:8080/
ProxyPassReverse/ http://www.zxsv.com:8080 /
# Stammverzeichnis des Cache-Verzeichnisses
CacheRoot „/var/www/proxy“
# maximaler Cache-Speicher
CacheSize 50000000
# Stunde: alle 4 Stunden
CacheGcInterval 4
# maximale Ablaufzeit der Seite: Stunde
CacheMaxExpire 240
# Ablaufzeit = (jetzt – last_modified) * CacheLastModifiedFactor
CacheLastModifiedFactor 0.1
# Standard-Ablauftag: Stunde
CacheDefaultExpire 1
# Abschluss erzwingen, nachdem Prozent des Inhalts abgerufen wurden: 60–90 %
CacheForceCompletion80
CustomLog /usr/local/Apache/logs/dev_access_log kombiniert
</VirtualHost>
Ich werde das Beispiel von SQUID nicht erklären. Es gibt zu viele Artikel darüber im Internet. Sie können selbst danach suchen.
DNS-Abfrage:
BIND ist eine Open-Source-DNS-Serversoftware. Suchen Sie einfach selbst danach und jeder weiß, dass sie existiert.
Ich weiß, dass einige große Websites wie Chinacache dies tun. Vereinfacht gesagt handelt es sich um eine Multi-Server-Cache. Dieselbe Seite oder Datei wird je nach Norden und Süden automatisch auf den entsprechenden Server geparst.