PHP企业级应用缓存技术详解_PHP
之前我们曾深入的探讨过PHP缓存技术,其中主要提到了数据缓存。数据缓存主要是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据, 并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。
举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个 数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
页面缓存
每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问 的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)
时间触发缓存
检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。
内容触发缓存
当插入数据或更新数据时,强制更新缓存。
静态缓存
这里所说的静态缓存是指静态化,直接生成HTML或xml等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。
内存缓存
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
<ol class="dp-xml"> <li class="alt"><span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">php</span></font></strong><span> </span></span></li> <li> <span>$</span><span class="attribute"><font color="#ff0000">memcache</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> Memcache; </span> </li> <li class="alt"> <span>$memcache-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>connect(‘localhost’, 11211) or die (“Could not connect”); </span> </li> <li> <span>$</span><span class="attribute"><font color="#ff0000">version</font></span><span> = $memcache-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>getVersion(); </span> </li> <li class="alt"><span>echo “Server’s version: “.$version.”\n”; </span></li> <li> <span>$</span><span class="attribute"><font color="#ff0000">tmp_object</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">new</font></span><span> stdClass; </span> </li> <li class="alt"> <span>$tmp_object-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">str_attr</font></span><span> = ‘test’; </span> </li> <li> <span>$tmp_object-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">int_attr</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">123</font></span><span>; </span> </li> <li class="alt"> <span>$memcache-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>set(‘key’, $tmp_object, false, 10) or die (“Failed to save data at the server”); </span> </li> <li><span>echo “Store data in the cache (data will expire in 10 seconds)\n”; </span></li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">get_result</font></span><span> = $memcache-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>get(‘key’); </span> </li> <li><span>echo “Data from the cache:\n”; </span></li> <li class="alt"><span>var_dump($get_result); </span></li> <li> <span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span> </li> </ol>
读库的例子:
<ol class="dp-xml"> <li class="alt"><span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">php</span></font></strong><span> </span></span></li> <li> <span>$</span><span class="attribute"><font color="#ff0000">sql</font></span><span> = ‘SELECT * FROM users’; </span> </li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">key</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">md5</font></span><span>($sql); //memcached 对象标识符 </span> </li> <li> <span>if ( !($</span><span class="attribute"><font color="#ff0000">datas</font></span><span> = $mc-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>get($key)) ) { </span> </li> <li class="alt"><span> </span></li> <li><span>// 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集 </span></li> <li class="alt"><span> </span></li> <li><span>echo “n”.str_pad(‘Read datas from MySQL.’, 60, ‘_’).”n”; </span></li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">conn</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">mysql_connect</font></span><span>(‘localhost’, ‘test’, ‘test’); </span> </li> <li><span>mysql_select_db(‘test’); </span></li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">result</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">mysql_query</font></span><span>($sql); </span> </li> <li> <span>while ($</span><span class="attribute"><font color="#ff0000">row</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">mysql_fetch_object</font></span><span>($result)) </span> </li> <li class="alt"><span>$datas[] = $row; </span></li> <li><span> </span></li> <li class="alt"><span>// 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用 </span></li> <li><span> </span></li> <li class="alt"> <span>$mc-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>add($key, $datas); </span> </li> <li><span>} else { </span></li> <li class="alt"><span>echo “n”.str_pad(‘Read datas from memcached.’, 60, ‘_’).”n”; </span></li> <li><span>} </span></li> <li class="alt"><span>var_dump($datas); </span></li> <li> <span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span> </li> </ol>
PHP的缓冲器
比如eaccelerator,apc,phpa,xcache等等。
MySQL缓存
这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的。
- [client]
- ……
- default-character-set=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
<span></span>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Peranan dan aplikasi praktikal simbol anak panah dalam PHP Dalam PHP, simbol anak panah (->) biasanya digunakan untuk mengakses sifat dan kaedah objek. Objek adalah salah satu konsep asas pengaturcaraan berorientasikan objek (OOP) dalam PHP Dalam pembangunan sebenar, simbol anak panah memainkan peranan penting dalam mengendalikan objek. Artikel ini akan memperkenalkan peranan dan aplikasi praktikal simbol anak panah, dan menyediakan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. 1. Peranan simbol anak panah untuk mengakses sifat sesuatu objek Simbol anak panah boleh digunakan untuk mengakses sifat objek. Apabila kita instantiate sepasang

Memadamkan sesuatu yang penting daripada skrin utama anda dan cuba mendapatkannya semula? Anda boleh meletakkan ikon apl kembali pada skrin dalam pelbagai cara. Kami telah membincangkan semua kaedah yang boleh anda ikuti dan meletakkan semula ikon aplikasi pada skrin utama Cara Buat Asal Alih Keluar dari Skrin Utama dalam iPhone Seperti yang kami nyatakan sebelum ini, terdapat beberapa cara untuk memulihkan perubahan ini pada iPhone. Kaedah 1 – Gantikan Ikon Apl dalam Pustaka Apl Anda boleh meletakkan ikon apl pada skrin utama anda terus daripada Pustaka Apl. Langkah 1 – Leret ke sisi untuk mencari semua apl dalam pustaka apl. Langkah 2 – Cari ikon apl yang anda padamkan sebelum ini. Langkah 3 – Hanya seret ikon apl dari pustaka utama ke lokasi yang betul pada skrin utama. Ini adalah gambar rajah aplikasi

Kertas kerja ini meneroka masalah mengesan objek dengan tepat dari sudut pandangan yang berbeza (seperti perspektif dan pandangan mata burung) dalam pemanduan autonomi, terutamanya cara mengubah ciri dari perspektif (PV) kepada ruang pandangan mata burung (BEV) dengan berkesan dilaksanakan melalui modul Transformasi Visual (VT). Kaedah sedia ada secara amnya dibahagikan kepada dua strategi: penukaran 2D kepada 3D dan 3D kepada 2D. Kaedah 2D-ke-3D meningkatkan ciri 2D yang padat dengan meramalkan kebarangkalian kedalaman, tetapi ketidakpastian yang wujud dalam ramalan kedalaman, terutamanya di kawasan yang jauh, mungkin menimbulkan ketidaktepatan. Manakala kaedah 3D ke 2D biasanya menggunakan pertanyaan 3D untuk mencuba ciri 2D dan mempelajari berat perhatian bagi kesesuaian antara ciri 3D dan 2D melalui Transformer, yang meningkatkan masa pengiraan dan penggunaan.

Perintah Linuxtee ialah alat baris arahan yang sangat berguna yang boleh menulis output ke fail atau menghantar output ke arahan lain tanpa menjejaskan output sedia ada. Dalam artikel ini, kami akan meneroka secara mendalam pelbagai senario aplikasi arahan Linuxtee, daripada kemasukan kepada kemahiran. 1. Penggunaan asas Mula-mula, mari kita lihat pada penggunaan asas arahan tee. Sintaks arahan tee adalah seperti berikut: tee[OPTION]...[FAIL]...Arahan ini akan membaca data daripada input standard dan menyimpan data ke

Operator modulo (%) dalam PHP digunakan untuk mendapatkan baki pembahagian dua nombor. Dalam artikel ini, kami akan membincangkan peranan dan penggunaan pengendali modulo secara terperinci, dan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. 1. Peranan pengendali modulo Dalam matematik, apabila kita membahagi integer dengan integer lain, kita mendapat hasil bagi dan baki. Sebagai contoh, apabila kita membahagi 10 dengan 3, hasil bahagi ialah 3 dan selebihnya ialah 1. Operator modulo digunakan untuk mendapatkan baki ini. 2. Penggunaan operator modulo Dalam PHP, gunakan simbol % untuk mewakili modulus

Bahasa Go ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google dan pertama kali dikeluarkan pada tahun 2007. Ia direka bentuk untuk menjadi bahasa yang mudah, mudah dipelajari, cekap dan sangat bersesuaian, serta digemari oleh semakin ramai pembangun. Artikel ini akan meneroka kelebihan bahasa Go, memperkenalkan beberapa senario aplikasi yang sesuai untuk bahasa Go dan memberikan contoh kod khusus. Kelebihan: Konkurensi yang kuat: Bahasa Go mempunyai sokongan terbina dalam untuk benang-goroutine ringan, yang boleh melaksanakan pengaturcaraan serentak dengan mudah. Goroutin boleh dimulakan dengan menggunakan kata kunci go

Ditulis di atas & Pemahaman peribadi penulis ialah pembinaan semula 3D berasaskan imej ialah tugas mencabar yang melibatkan membuat inferens bentuk 3D objek atau pemandangan daripada set imej input. Kaedah berasaskan pembelajaran telah menarik perhatian kerana keupayaan mereka untuk menganggar secara langsung bentuk 3D. Kertas ulasan ini memfokuskan pada teknik pembinaan semula 3D yang canggih, termasuk menjana novel, pandangan ghaib. Gambaran keseluruhan perkembangan terkini dalam kaedah percikan Gaussian disediakan, termasuk jenis input, struktur model, perwakilan output dan strategi latihan. Cabaran yang tidak dapat diselesaikan dan hala tuju masa depan turut dibincangkan. Memandangkan kemajuan pesat dalam bidang ini dan banyak peluang untuk meningkatkan kaedah pembinaan semula 3D, pemeriksaan menyeluruh terhadap algoritma nampaknya penting. Oleh itu, kajian ini memberikan gambaran menyeluruh tentang kemajuan terkini dalam serakan Gaussian. (Leret ibu jari anda ke atas

Pada 23 September, kertas kerja "DeepModelFusion:ASurvey" diterbitkan oleh Universiti Teknologi Pertahanan Nasional, JD.com dan Institut Teknologi Beijing. Gabungan/penggabungan model dalam ialah teknologi baru muncul yang menggabungkan parameter atau ramalan berbilang model pembelajaran mendalam ke dalam satu model. Ia menggabungkan keupayaan model yang berbeza untuk mengimbangi bias dan ralat model individu untuk prestasi yang lebih baik. Gabungan model mendalam pada model pembelajaran mendalam berskala besar (seperti LLM dan model asas) menghadapi beberapa cabaran, termasuk kos pengiraan yang tinggi, ruang parameter berdimensi tinggi, gangguan antara model heterogen yang berbeza, dsb. Artikel ini membahagikan kaedah gabungan model dalam sedia ada kepada empat kategori: (1) "Sambungan corak", yang menghubungkan penyelesaian dalam ruang berat melalui laluan pengurangan kerugian untuk mendapatkan gabungan model awal yang lebih baik.
