Tecnología de almacenamiento en caché universal
Caché de datos: el caché de datos mencionado aquí se refiere al caché de consultas de la base de datos. Cada vez que se accede a una página, primero detectará si los datos almacenados en caché correspondientes existen, se conectará a la base de datos, obtendrá los datos y los serializará. los resultados de la consulta. Guárdelos en un archivo y los mismos resultados de la consulta se obtendrán directamente de la tabla o archivo de caché en el futuro.
El ejemplo más utilizado es la función de búsqueda de Discuz, que almacena en caché el ID del resultado en una tabla y busca primero en la tabla de caché la próxima vez que busca la misma palabra clave.
Como método común, cuando se asocian varias tablas, el contenido de la tabla adjunta se genera en una matriz y se guarda en un campo de la tabla principal. Cuando es necesario, la matriz se descompone. La ventaja de esto es que solo se puede descomponer una tabla. leer, pero la desventaja es que la sincronización de dos datos requerirá muchos más pasos, y la base de datos es siempre el cuello de botella. Cambiar el disco duro por velocidad es el punto clave en esto.
Caché de página:
Cada vez que se accede a una página, primero detectará si el archivo de página en caché correspondiente existe. Si no existe, se conectará a la base de datos, obtendrá los datos, mostrará la página y generará un archivo de página en caché al mismo tiempo. para que el archivo de la página entre en juego la próxima vez que lo visite. (Los motores de plantillas y algunas clases de caché comunes en Internet suelen tener esta función)
Caché activado por tiempo:
Compruebe si el archivo existe y la marca de tiempo es menor que el tiempo de vencimiento establecido. Si la marca de tiempo de modificación del archivo es mayor que la marca de tiempo actual menos la marca de tiempo de vencimiento, utilice el caché; de lo contrario, actualice el caché.
El contenido activa el almacenamiento en caché:
Fuerce la actualización de la caché cuando se inserten o actualicen datos.
Caché estático:
El caché estático mencionado aquí se refiere a archivos de texto estáticos, como HTML o XML, que se generan directamente y se regeneran cuando hay actualizaciones. Es adecuado para páginas que no cambian mucho, por lo que no hablaré de eso aquí.
El contenido anterior es una solución a nivel de código. CP directamente otros marcos y soy demasiado vago para cambiar. El contenido es casi el mismo. Es fácil de hacer y se puede usar de varias maneras. -Solución de almacenamiento en caché del lado, no a nivel de código, y requiere la cooperación de varias partes para lograrlo.
Memoria caché:
Memcached es un sistema de almacenamiento en caché de objetos de memoria distribuida de alto rendimiento que se utiliza para reducir la carga de la base de datos y mejorar la velocidad de acceso en aplicaciones dinámicas.
A continuación se muestra un ejemplo de Memcached:
<?php
$memcache = nuevo Memcache;
$memcache->connect('localhost', 11211) o morir ("No se pudo conectar");
$versión = $memcache->getVersion();
echo “Versión del servidor: “.$version.”n”;
$tmp_object = nueva clase estándar;
$tmp_object->str_attr = 'prueba';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) o die ("Error al guardar los datos en el servidor");
echo “Almacenar datos en el caché (los datos caducan en 10 segundos)n”;
$get_result = $memcache->get('clave');
echo “Datos del caché:n”;
var_dump($get_result);
?>
Ejemplo de lectura de la biblioteca:
<?php
$sql = 'SELECCIONAR * DE usuarios';
$key = md5($sql); //identificador de objeto memcached
si ( !($datos = $mc->get($clave)) ) {
// Si los datos almacenados en caché no se obtienen en Memcached, utilice la consulta de la base de datos para obtener el conjunto de registros.
echo "n".str_pad('Leer datos de MySQL.', 60, '_')."n";
$conn = mysql_connect('localhost', 'prueba', 'prueba');
mysql_select_db('prueba');
$resultado = mysql_query($sql);
mientras ($fila = mysql_fetch_object($resultado))
$datos[] = $fila;
//Guarde los datos del conjunto de resultados obtenidos de la base de datos en Memcached para usarlos durante el próximo acceso.
$mc->add($clave, $datos);
} demás {
echo "n".str_pad('Leer datos de memcached.', 60, '_')."n";
}
var_dump($datos);
?>
búfer php:
Hay eaccelerator, apc, phpa y xcache. No hablaré de estos. Busque varios de ellos y compruébelo usted mismo.
Caché MYSQL:
Esto también se considera un nivel sin código. Las bases de datos clásicas usan este método. Mire el tiempo de ejecución a continuación. Publicaré una sección como 0.09xxx basada en la parte modificada de my.ini basada en la tabla 2G MYISAM. alrededor de 0.05S, se dice que lo cambió durante casi un año.
[cliente]
…
conjunto-de-caracteres-predeterminado=gbk
motor-de-almacenamiento-predeterminado=MYISAM
conexiones_max=600
max_connect_errors=500
back_log=200
tiempo de espera interactivo = 7200
query_cache_size=64M
…
tabla_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
…
hilo_concurrencia = 8
Almacenamiento en caché web basado en proxy inverso:
Como Nginx, SQUID, mod_proxy (apache2 y superiores se dividen en mod_proxy y mod_cache)
Ejemplo de NGINX
<nginx.conf>
#usuario nadie;
procesos_trabajadores 4;
error_log registros/error.log crítico;
pid registros/nginx.pid;
trabajador_rlimit_nofile 10240;
eventos {
utilizar epoll;
conexiones_trabajadores 51200;
}
http {
incluir tipos.mime;
aplicación de tipo_predeterminado/flujo de octeto;
enviar archivo activado;
keepalive_timeout 65;
tcp_nodelay activado;
# grupo de servidores
bspfrontsvr aguas arriba {
servidor 10.10.10.224:80 peso=1;
servidor 10.10.10.221:80 peso=1;
}
aguas arriba bspimgsvr {
servidor 10.10.10.201:80 peso=1;
}
bspstylesvr aguas arriba {
servidor 10.10.10.202:80 peso=1;
}
bsphelpsvr aguas arriba {
servidor 10.10.10.204:80 peso=1;
}
aguas arriba bspwsisvr {
servidor 10.10.10.203:80 peso=1;
}
bspadminsvr aguas arriba {
servidor 10.10.10.222:80 peso=1;
}
bspbuyersvr aguas arriba {
servidor 10.10.10.223:80 peso=1;
}
bspsellersvr aguas arriba {
servidor 10.10.10.225:80 peso=1;
}
bsploginsvr ascendente {
servidor 10.10.10.220:443 peso=1;
}
bspregistersvr aguas arriba {
servidor 10.10.10.220:80 peso=1;
}
log_format test_com '$remote_addr – $remote_user [$time_local] “$solicitud” '
'$estado $body_bytes_sent "$http_referer" "$http_user_agent" ';
#———————————————————————–
#img.test.com
servidor {
escucha 10.10.10.230:80;
nombre_servidor img.test.com;
ubicación/{
proxy_passhttp ://bspimgsvr ;
incluir proxy_setting.conf;
}
access_log registros/img.log test_com;
}
#estilo.test.com
servidor {
escucha 10.10.10.230:80;
nombre_servidor estilo.test.com;
ubicación/{
proxy_passhttp ://bspstylesvr ;
incluir proxy_setting.conf;
}
acceso_log registros/style.log test_com;
}
#ayuda.test.com
servidor {
escucha 10.10.10.230:80;
nombre_servidor ayuda.test.com;
ubicación/{
proxy_passhttp ://bsphelpsvr ;
incluir proxy_setting.conf;
}
access_log registros/help.log test_com;
}
#admin.test.com
servidor {
escucha 10.10.10.230:80;
nombre_servidor admin.test.com;
ubicación/{
proxy_passhttp ://bspadminsvr ;
incluir proxy_setting.conf;
}
access_log registros/admin.log test_com;
}
#comprador.test.com
servidor {
escucha 10.10.10.230:80;
nombre_servidor comprador.test.com;
ubicación/{
proxy_passhttp ://bspbuyersvr ;
incluir proxy_setting.conf;
}
access_log registros/buyer.log test_com;
}
#vendedor.test.com
servidor {
escucha 10.10.10.230:80;
nombre_servidor vendedor.prueba.com;
ubicación/{
proxy_pass http://bspsellersvr ;
incluir proxy_setting.conf;
}
access_log registros/seller.log test_com;
}
#wsi.test.com
servidor {
escucha 10.10.10.230:80;
nombre_servidor wsi.test.com;
ubicación/{
proxy_passhttp ://bspwsisvr ;
incluir proxy_setting.conf;
}
access_log registros/wsi.log test_com;
}
#www.prueba.com
servidor {
escucha 10.10.10.230:80;
nombre_servidor www.test.com *.test.com;
ubicación ~ ^/NginxStatus/ {
stub_status activado;
acceso_cerrar sesión;
}
ubicación/{
proxy_passhttp ://bspfrontsvr ;
incluir proxy_setting.conf;
}
acceso_log registros/www.log test_com;
página_error 500 502 503 504 /50x.html;
ubicación = /50x.html {
raízhtml;
}
}
#iniciar sesión.test.com
servidor {
escuche 10.10.10.230:443;
nombre_servidor login.test.com;
SSL activado;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers TODOS:!ADH:!EXPORT56:RC4+RSA:+ALTO:+MEDIO:+BAJO:+SSLv2:+EXP;
ssl_prefer_server_ciphers activado;
ubicación/{
proxy_pass https://bsploginsvr ;
incluir proxy_setting.conf;
}
access_log registros/login.log test_com;
}
#login.test.com para registrarse
servidor {
escucha 10.10.10.230:80;
nombre_servidor login.test.com;
ubicación/{
proxy_pass http://bspregistersvr ;
incluir proxy_setting.conf;
}
access_log registros/register.log test_com;
}
}
<conf/proxy_setting.conf>
proxy_redirect desactivado;
proxy_set_header Anfitrión $anfitrión;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Reenviado-Para $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;
Ejemplo de mod_proxy:
<Host virtual *>
Nombre del servidor www.zxsv.com
Administrador del servidor [email protected]
# configuración de proxy inverso
ProxyPass/ http://www.zxsv.com:8080/
ProxyPassReverse/ http://www.zxsv.com:8080 /
# raíz del directorio de caché
Raíz de caché “/var/www/proxy”
# almacenamiento máximo de caché
Tamaño de caché 50000000
# hora: cada 4 horas
CachéGcIntervalo 4
# tiempo máximo de caducidad de la página: hora
CachéMaxExpire 240
# Tiempo de caducidad = (ahora – last_modified) * CacheLastModifiedFactor
CacheLastModifiedFactor 0.1
# etiqueta de caducidad predeterminada: hora
CachéDefaultExpire 1
# forzar finalización después del porcentaje de contenido recuperado: 60-90%
CacheForceCompletion80
CustomLog /usr/local/apache/logs/dev_access_log combinado
</VirtualHost>
No explicaré el ejemplo de SQUID. Hay demasiados artículos sobre esto en Internet. Puedes buscarlo tú mismo.
Sondeo DNS:
BIND es un software de servidor DNS de código abierto. Es importante mencionarlo. Simplemente búsquelo usted mismo y todos sabrán que existe.
Sé que algunos sitios web grandes como Chinacache hacen esto. En pocas palabras, la misma página o archivo se almacena en caché en diferentes servidores y se analiza automáticamente en el servidor correspondiente según el norte y el sur.