Teknologi cache universal
Cache data: Cache data yang disebutkan di sini mengacu pada cache kueri database. Setiap kali halaman diakses, halaman tersebut akan mendeteksi terlebih dahulu apakah data cache yang sesuai ada. Jika tidak ada, sambungkan ke database, dapatkan data, dan buat serial hasil kueri. Simpan ke file, dan hasil kueri yang sama akan diperoleh langsung dari tabel atau file cache di masa mendatang.
Contoh yang paling banyak digunakan adalah fungsi pencarian Discuz, yang menyimpan ID hasil ke dalam tabel dan mencari tabel cache terlebih dahulu saat mencari kata kunci yang sama di lain waktu.
Sebagai metode umum, ketika beberapa tabel dikaitkan, konten dalam tabel terlampir dihasilkan menjadi sebuah array dan disimpan dalam bidang tabel utama. Bila perlu, array tersebut didekomposisi dapat dibaca, namun kelemahannya adalah Sinkronisasi dua data akan memerlukan lebih banyak langkah, dan database selalu menjadi hambatan. Memperdagangkan hard disk untuk kecepatan adalah poin kunci dalam hal ini.
Tembolok halaman:
Setiap kali suatu halaman diakses, pertama-tama ia akan mendeteksi apakah file halaman cache yang sesuai ada, jika tidak ada, ia akan terhubung ke database, mengambil data, menampilkan halaman dan menghasilkan file halaman cache pada saat yang sama. sehingga file halaman dapat digunakan pada kunjungan Anda berikutnya. (Mesin template dan beberapa kelas cache umum di Internet biasanya memiliki fungsi ini)
Cache yang dipicu waktu:
Periksa apakah file ada dan stempel waktu kurang dari waktu kedaluwarsa yang ditetapkan. Jika stempel waktu modifikasi file lebih besar dari stempel waktu saat ini dikurangi stempel waktu kedaluwarsa, gunakan cache, jika tidak, perbarui cache.
Konten memicu caching:
Memaksa cache untuk diperbarui ketika data dimasukkan atau diperbarui.
Cache statis:
Cache statis yang disebutkan di sini mengacu pada statis, langsung menghasilkan file teks seperti HTML atau XML, dan membuatnya kembali ketika ada pembaruan. Cocok untuk halaman yang tidak banyak berubah, jadi saya tidak akan membicarakannya di sini.
Konten di atas adalah solusi tingkat kode. Saya langsung meng-CP framework lain dan terlalu malas untuk mengubahnya. Kontennya hampir sama. Mudah dilakukan dan dapat digunakan dalam beberapa cara -solusi caching samping, bukan level kode, memerlukan kerja sama banyak pihak untuk mencapainya
Tembolok memori:
Memcached adalah sistem caching objek memori terdistribusi berkinerja tinggi yang digunakan untuk mengurangi beban database dan meningkatkan kecepatan akses dalam aplikasi dinamis.
Berikut ini contoh Memcached:
<?php
$memcache = Memcache baru;
$memcache->connect('localhost', 11211) or die("Tidak dapat terhubung");
$versi = $memcache->getVersion();
echo “Versi server: “.$version.”n”;
$tmp_object = kelas std baru;
$tmp_object->str_attr = 'uji';
$tmp_objek->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die (“Gagal menyimpan data di server”);
echo “Simpan data di cache (data akan habis masa berlakunya dalam 10 detik)n”;
$get_result = $memcache->dapatkan('kunci');
echo “Data dari cache:n”;
var_dump($dapatkan_hasil);
?>
Contoh membaca perpustakaan:
<?php
$sql = 'PILIH * DARI pengguna';
$key = md5($sql); //pengidentifikasi objek memcached
jika ( !($data = $mc->dapatkan($kunci)) ) {
// Jika data yang di-cache tidak diperoleh di memcached, gunakan kueri database untuk mendapatkan kumpulan data.
echo "n".str_pad('Baca data dari MySQL.', 60, '_')."n";
$sambung = mysql_connect('localhost', 'tes', 'tes');
mysql_select_db('tes');
$hasil = mysql_query($sql);
while ($baris = mysql_fetch_object($hasil))
$data[] = $baris;
//Simpan data kumpulan hasil yang diperoleh dari database ke memcached untuk digunakan pada akses berikutnya.
$mc->tambah($kunci, $data);
} kalau tidak {
echo "n".str_pad('Baca data dari memcached.', 60, '_')."n";
}
var_dump($data);
?>
penyangga php:
Ada eaccelerator, apc, phpa, dan xcache. Saya tidak akan membicarakan ini. Cari banyak dari mereka dan lihat sendiri.
Tembolok MYSQL:
Ini juga dianggap sebagai level non-kode. Database klasik menggunakan metode ini. Lihat waktu berjalan di bawah. Saya akan memposting bagian seperti 0.09xxx berdasarkan bagian my.ini yang dimodifikasi berdasarkan tabel MYISAM 2G digunakan. Sekitar 0,05S, konon dia mengubahnya selama hampir satu tahun.
[klien]
…
set karakter-default=gbk
mesin-penyimpanan-default=MYISAM
koneksi_maks=600
max_connect_errors=500
kembali_log=200
waktu_interaktif=7200
query_cache_size=64M
…
tabel_cache=512
…
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=128M
key_buffer_size=1024M
baca_buffer_size=512M
…
thread_concurrency=8
Caching web berbasis proksi terbalik:
Seperti Nginx, SQUID, mod_proxy (apache2 ke atas dibagi menjadi mod_proxy dan mod_cache)
Contoh NGINX
<nginx.conf>
#pengguna bukan siapa-siapa;
proses_pekerja 4;
error_log logs/error.log kritik;
log pid/nginx.pid;
pekerja_rlimit_nofile 10240;
acara {
gunakan epoll;
koneksi_pekerja 51200;
}
http {
sertakan mime.types;
default_type aplikasi/aliran oktet;
kirim file aktif;
keepalive_timeout 65;
tcp_nodelay aktif;
# kumpulan server
bspfrontsvr hulu {
server 10.10.10.224:80 berat=1;
server 10.10.10.221:80 berat=1;
}
bspimgsvr hulu {
server 10.10.10.201:80 berat=1;
}
bspstylesvr hulu {
server 10.10.10.202:80 berat=1;
}
bsphelpsvr hulu {
server 10.10.10.204:80 berat=1;
}
bspwsisvr hulu {
server 10.10.10.203:80 berat=1;
}
bspadminsvr hulu {
server 10.10.10.222:80 berat=1;
}
bspbuyersvr hulu {
server 10.10.10.223:80 berat=1;
}
bspellervr hulu {
server 10.10.10.225:80 berat=1;
}
bsploginsvr hulu {
server 10.10.10.220:443 berat=1;
}
bspregistersvr hulu {
server 10.10.10.220:80 berat=1;
}
log_format test_com '$remote_addr – $remote_user [$time_local] “$request” '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" ';
#----------------------------------------------------------------
#img.test.com
pelayan {
dengarkan 10.10.10.230:80;
nama_server img.test.com;
lokasi/{
proxy_pass http://bspimgsvr ;
sertakan proxy_setting.conf;
}
access_log logs/img.log test_com;
}
#style.test.com
pelayan {
dengarkan 10.10.10.230:80;
nama_server style.test.com;
lokasi/{
proxy_pass http://bspstylesvr ;
sertakan proxy_setting.conf;
}
access_log logs/style.log test_com;
}
#help.test.com
pelayan {
dengarkan 10.10.10.230:80;
nama_server help.test.com;
lokasi/{
proxy_pass http://bsphelpsvr ;
sertakan proxy_setting.conf;
}
access_log logs/help.log test_com;
}
#admin.test.com
pelayan {
dengarkan 10.10.10.230:80;
nama_server admin.test.com;
lokasi/{
proxy_pass http://bspadminsvr ;
sertakan proxy_setting.conf;
}
access_log logs/admin.log test_com;
}
#pembeli.test.com
pelayan {
dengarkan 10.10.10.230:80;
nama_server pembeli.test.com;
lokasi/{
proxy_pass http://bspbuyersvr ;
sertakan proxy_setting.conf;
}
access_log logs/buyer.log test_com;
}
#penjual.test.com
pelayan {
dengarkan 10.10.10.230:80;
nama_server penjual.test.com;
lokasi/{
proxy_pass http://bspellervr ;
sertakan proxy_setting.conf;
}
access_log logs/seller.log test_com;
}
#wsi.test.com
pelayan {
dengarkan 10.10.10.230:80;
nama_server wsi.test.com;
lokasi/{
proxy_pass http://bspwsisvr ;
sertakan proxy_setting.conf;
}
access_log logs/wsi.log test_com;
}
#www.test.com
pelayan {
dengarkan 10.10.10.230:80;
nama_server www.test.com *.test.com;
lokasi ~ ^/NginxStatus/ {
stub_status aktif;
access_log off;
}
lokasi/{
proxy_pass http://bspfrontsvr ;
sertakan proxy_setting.conf;
}
access_log logs/www.log test_com;
error_page 500 502 503 504 /50x.html;
lokasi = /50x.html {
roothtml;
}
}
#login.test.com
pelayan {
dengarkan 10.10.10.230:443;
nama_server login.test.com;
aktif;
ssl_certificate sertifikat.pem;
ssl_certificate_key sertifikat.kunci;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers SEMUA:!ADH:!EXPORT56:RC4+RSA:+TINGGI:+SEDANG:+RENDAH:+SSLv2:+EXP;
ssl_prefer_server_ciphers aktif;
lokasi/{
proxy_pass https://bsploginsvr ;
sertakan proxy_setting.conf;
}
access_log logs/login.log test_com;
}
#login.test.com untuk mendaftar
pelayan {
dengarkan 10.10.10.230:80;
nama_server login.test.com;
lokasi/{
proxy_pass http://bspregistersvr ;
sertakan proxy_setting.conf;
}
access_log logs/register.log test_com;
}
}
<conf/proxy_setting.conf>
proxy_redirect tidak aktif;
proxy_set_header Tuan rumah $host;
proxy_set_header X-IP Asli $remote_addr;
proxy_set_header X-Diteruskan-Untuk $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_ukuran 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_ukuran 64k;
proxy_temp_file_write_size 64k;
Contoh mod_proxy:
<Host Virtual *>
Nama Server www.zxsv.com
ServerAdmin [email protected]
# pengaturan proksi terbalik
ProxyPass / http://www.zxsv.com:8080/
ProxyPassReverse/ http://www.zxsv.com:8080 /
# cache di root
CacheRoot “/var/www/proksi”
# penyimpanan cache maksimal
Ukuran Cache 50000000
# jam: setiap 4 jam
Interval CacheGc 4
# waktu kedaluwarsa halaman maks: jam
CacheMaxKedaluwarsa 240
# Waktu kedaluwarsa = (sekarang – last_modified) * CacheLastModifiedFactor
CacheLastModifiedFactor 0.1
# tag kedaluwarsa default: jam
CacheDefaultKedaluwarsa 1
# pemaksaan selesai setelah sebagian konten diambil: 60-90%
Penyelesaian CacheForce80
CustomLog /usr/local/apache/logs/dev_access_log digabungkan
</Host Virtual>
Saya tidak akan menjelaskan contoh SQUID. Terlalu banyak artikel tentang ini di Internet.
jajak pendapat DNS:
BIND adalah perangkat lunak server DNS open source. Ini adalah masalah besar untuk disebutkan. Cari saja sendiri dan semua orang tahu bahwa itu ada.
Saya tahu bahwa beberapa situs web besar seperti chinacache melakukan ini. Sederhananya, ini adalah multi-server. Halaman atau file yang sama di-cache di server yang berbeda dan secara otomatis diurai ke server yang relevan menurut utara dan selatan.