Универсальная технология кэширования
Кэш данных. Упомянутый здесь кеш данных относится к кешу запросов к базе данных. Каждый раз, когда осуществляется доступ к странице, он сначала определяет, существуют ли соответствующие кэшированные данные. Если они не существуют, подключайтесь к базе данных, получайте данные и сериализуйте. результаты запроса. Сохраните его в файл, и в будущем те же результаты запроса будут получены непосредственно из таблицы или файла кэша.
Наиболее широко используемым примером является функция поиска Discuz, которая кэширует идентификатор результата в таблицу и сначала выполняет поиск в таблице кэша при следующем поиске того же ключевого слова.
Обычно при связывании нескольких таблиц содержимое прикрепленной таблицы генерируется в массив и сохраняется в поле основной таблицы. При необходимости массив разбивается. Преимущество этого метода заключается в том, что можно разложить только одну таблицу. можно прочитать, но недостатком является то, что синхронизация двух данных потребует гораздо больше шагов, а база данных всегда является узким местом. Ключевым моментом в этом является обмен жесткого диска на скорость.
Кэш страниц:
Каждый раз, когда осуществляется доступ к странице, он сначала определяет, существует ли соответствующий кэшированный файл страницы. Если он не существует, он подключается к базе данных, получает данные, отображает страницу и одновременно генерирует кэшированный файл страницы. чтобы файл подкачки вступил в действие при следующем посещении . (Эта функция обычно есть в механизмах шаблонов и некоторых распространенных классах кэша в Интернете)
Кэш, запускаемый по времени:
Проверьте, существует ли файл и его метка времени меньше установленного времени истечения срока действия. Если метка времени изменения файла больше текущей метки времени минус метка времени истечения срока действия, используйте кеш, в противном случае обновите кеш.
Содержимое запускает кеширование:
Принудительно обновлять кэш при вставке или обновлении данных.
Статический кеш:
Упомянутый здесь статический кеш относится к статическим, непосредственно генерирующим текстовые файлы, такие как HTML или XML, и восстанавливающим их при наличии обновлений. Он подходит для страниц, которые не сильно изменяются, поэтому я не буду говорить об этом здесь.
Вышеупомянутый контент представляет собой решение на уровне кода. Я напрямую CP других фреймворков, и мне лень его менять. Его легко сделать, и его можно использовать несколькими способами. Однако следующий контент представляет собой сервер. Решение для кэширования на стороне, а не на уровне кода, для его достижения требуется сотрудничество нескольких сторон.
Кэш памяти:
Memcached — это высокопроизводительная система кэширования объектов с распределенной памятью, используемая для снижения нагрузки на базу данных и повышения скорости доступа в динамических приложениях.
Вот пример Memcached:
<?php
$memcache = новый кэш памяти;
$memcache->connect('localhost', 11211) или умереть («Не удалось подключиться»);
$version = $memcache->getVersion();
echo «Версия сервера: «.$version».n»;
$tmp_object = новый стандартный класс;
$tmp_object->str_attr = 'тест';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) или умереть («Не удалось сохранить данные на сервере»);
echo «Сохранить данные в кеше (срок действия данных истекает через 10 секунд)n»;
$get_result = $memcache->get('ключ');
echo «Данные из кэша:n»;
var_dump($get_result);
?>
Пример чтения библиотеки:
<?php
$sql = 'ВЫБРАТЬ * ИЗ пользователей';
$key = md5($sql); //идентификатор объекта memcached
if ( !($datas = $mc->get($key)) ) {
// Если кэшированные данные не получены в memcached, используйте запрос к базе данных для получения набора записей.
echo "n".str_pad('Читать данные из MySQL.', 60, '_')."n";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('тест');
$result = mysql_query($sql);
в то время как ($row = mysql_fetch_object($result))
$данные[] = $строка;
//Сохраняем данные набора результатов, полученные из базы данных, в memcached для использования при следующем доступе.
$mc->add($key, $datas);
} еще {
echo "n".str_pad('Читать данные из memcached.', 60, '_')."n";
}
var_dump ($ данные);
?>
php-буфер:
Есть eaccelerator, apc, phpa и xcache, о них говорить не буду. Поищите их кучу и убедитесь сами. Ничего страшного, если вы знаете, что такое есть.
Кэш MySQL:
Это также считается уровнем, не относящимся к коду. Классические базы данных используют этот метод. Посмотрите на время выполнения ниже. Я опубликую раздел типа 0.09xxx, основанный на измененной части my.ini на основе таблицы 2G MYISAM. использоваться около 0,05S, говорят, что менял почти год.
[клиент]
…
набор символов по умолчанию = gbk
механизм хранения по умолчанию = MYISAM
max_connections=600
max_connect_errors=500
back_log=200
active_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
Веб-кэширование на основе обратного прокси:
Такие как Nginx, SQUID, mod_proxy (apache2 и выше делятся на mod_proxy и mod_cache)
пример Nginx
<nginx.conf>
#пользователь никто;
рабочий_процесс 4;
журналы error_log/error.log crit;
журналы pid/nginx.pid;
worker_rlimit_nofile 10240;
события {
используйте epoll;
работник_соединения 51200;
}
http {
включить mime.types;
default_type приложение/октет-поток;
отправить файл включен;
Keepalive_timeout 65;
tcp_nodelay включен;
# пул серверов
восходящий bspfrontsvr {
сервер 10.10.10.224:80 вес=1;
сервер 10.10.10.221:80 вес=1;
}
восходящий bspimgsvr {
сервер 10.10.10.201:80 вес=1;
}
восходящий bspstylesvr {
сервер 10.10.10.202:80 вес=1;
}
восходящий bsphelpsvr {
сервер 10.10.10.204:80 вес=1;
}
восходящий bspwsisvr {
сервер 10.10.10.203:80 вес=1;
}
восходящий bspadminsvr {
сервер 10.10.10.222:80 вес=1;
}
вышестоящий bspbuyersvr {
сервер 10.10.10.223:80 вес=1;
}
восходящий bspsellersvr {
сервер 10.10.10.225:80 вес=1;
}
восходящий bsploginsvr {
сервер 10.10.10.220:443 вес=1;
}
восходящий bspregistersvr {
сервер 10.10.10.220:80 вес=1;
}
log_format test_com '$remote_addr – $remote_user [$time_local] “$request” '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" ';
#——————————————————————–
#img.test.com
сервер {
слушайте 10.10.10.230:80;
имя_сервера img.test.com;
расположение/{
proxy_pass http://bspimgsvr ;
включить proxy_setting.conf;
}
access_log журналы/img.log test_com;
}
#style.test.com
сервер {
слушайте 10.10.10.230:80;
имя_сервера style.test.com;
расположение/{
proxy_pass http://bspstylesvr ;
включить proxy_setting.conf;
}
access_log журналы/style.log test_com;
}
#help.test.com
сервер {
слушайте 10.10.10.230:80;
имя_сервера help.test.com;
расположение/{
proxy_pass http://bsphelpsvr ;
включить proxy_setting.conf;
}
access_log журналы/help.log test_com;
}
#admin.test.com
сервер {
слушайте 10.10.10.230:80;
имя_сервера admin.test.com;
расположение/{
proxy_pass http://bspadminsvr ;
включить proxy_setting.conf;
}
access_log журналы/admin.log test_com;
}
#buyer.test.com
сервер {
слушайте 10.10.10.230:80;
имя_сервера покупатель.test.com;
расположение/{
proxy_pass http://bspbuyersvr ;
включить proxy_setting.conf;
}
access_log журналы/buyer.log test_com;
}
#seller.test.com
сервер {
слушайте 10.10.10.230:80;
имя_сервера продавец.test.com;
расположение/{
proxy_pass http://bspsellersvr ;
включить proxy_setting.conf;
}
access_log журналы/seller.log test_com;
}
#wsi.test.com
сервер {
слушайте 10.10.10.230:80;
имя_сервера wsi.test.com;
расположение/{
proxy_pass http://bspwsisvr ;
включить proxy_setting.conf;
}
access_log журналы/wsi.log test_com;
}
#www.test.com
сервер {
слушайте 10.10.10.230:80;
имя_сервера www.test.com *.test.com;
местоположение ~ ^/NginxStatus/ {
stub_status включен;
access_log выключен;
}
расположение/{
proxy_pass http://bspfrontsvr ;
включить proxy_setting.conf;
}
access_log журналы/www.log test_com;
error_page 500 502 503 504 /50x.html;
местоположение = /50x.html {
roothtml;
}
}
#login.test.com
сервер {
слушайте 10.10.10.230:443;
имя_сервера login.test.com;
SSL включен;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5 м;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers включен;
расположение/{
proxy_pass https://bsploginsvr ;
включить proxy_setting.conf;
}
access_log журналы/login.log test_com;
}
#login.test.com для регистрации
сервер {
слушайте 10.10.10.230:80;
имя_сервера login.test.com;
расположение/{
proxy_pass http://bsregistersvr ;
включить proxy_setting.conf;
}
access_log журналы/register.log test_com;
}
}
<conf/proxy_setting.conf>
proxy_redirect выключен;
proxy_set_header Хост $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10 м;
client_body_buffer_size 128 КБ;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4 КБ;
proxy_buffers 4 32 КБ;
proxy_busy_buffers_size 64 КБ;
proxy_temp_file_write_size 64 КБ;
Пример mod_proxy:
<Виртуальныйхост *>
Имя сервера www.zxsv.com
Администратор сервера [email protected]
# настройка обратного прокси
ProxyPass / http://www.zxsv.com:8080/
ProxyPassReverse/ http://www.zxsv.com:8080 /
# корневой каталог кэша
CacheRoot «/var/www/proxy»
# максимальное хранилище кэша
Размер кэша 50000000
# час: каждые 4 часа
КэшГкИнтервал 4
# максимальное время истечения срока действия страницы: час
CacheMaxExpire 240
# Время истечения = (сейчас – Last_modified) * CacheLastModifiedFactor
Кэшластмодифицированныйфактор 0,1
# тег срока действия по умолчанию: час
Срок действия кэша по умолчанию 1
# принудительное завершение после получения процента содержимого: 60-90%
Кэшфорцекомплементион80
CustomLog /usr/local/apache/logs/dev_access_log вместе взятый
</Виртуальныйхост>
На примере СКВИДа объяснять не буду. В интернете слишком много статей об этом. Можете поискать сами.
Опрос DNS:
BIND — это программное обеспечение DNS-сервера с открытым исходным кодом. Об этом стоит упомянуть. Просто найдите его самостоятельно, и все узнают, что оно существует.
Я знаю, что некоторые крупные веб-сайты, такие как Chinacache, делают это. Проще говоря, это мультисерверная обработка одной и той же страницы или файла, которая кэшируется на разных серверах и автоматически анализируется на соответствующем сервере в зависимости от севера и юга.