1、普遍緩存技術(shù):
創(chuàng)新互聯(lián)公司長(zhǎng)期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為平果企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,平果網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
數(shù)據(jù)緩存:這里所說(shuō)的數(shù)據(jù)緩存是指數(shù)據(jù)庫(kù)查詢PHP緩存機(jī)制,每次訪問(wèn)頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存數(shù)據(jù)是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),并把查詢結(jié)果序列化后保存到文件中,以后同樣的查詢結(jié)果就直接從緩存表或文件中獲得。
用的最廣的例子看Discuz的搜索功能,把結(jié)果ID緩存到一個(gè)表中,下次搜索相同關(guān)鍵字時(shí)先搜索緩存表。
舉個(gè)常用的方法,多表關(guān)聯(lián)的時(shí)候,把附表中的內(nèi)容生成數(shù)組保存到主表的一個(gè)字段中,需要的時(shí)候數(shù)組分解一下,這樣的好處是只讀一個(gè)表,壞處就是兩個(gè)數(shù)據(jù)同步會(huì)多不少步驟,數(shù)據(jù)庫(kù)永遠(yuǎn)是瓶頸,用硬盤換速度,是這個(gè)的關(guān)鍵點(diǎn)。
2、 頁(yè)面緩存:
每次訪問(wèn)頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存頁(yè)面文件是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),顯示頁(yè)面并同時(shí)生成緩存頁(yè)面文件,這樣下次訪問(wèn)的時(shí)候頁(yè)面文件就發(fā)揮作用了。(模板引擎和網(wǎng)上常見的一些PHP緩存機(jī)制類通常有此功能)
3、 時(shí)間觸發(fā)緩存:
檢查文件是否存在并且時(shí)間戳小于設(shè)置的過(guò)期時(shí)間,如果文件修改的時(shí)間戳比當(dāng)前時(shí)間戳減去過(guò)期時(shí)間戳大,那么就用緩存,否則更新緩存。
4、 內(nèi)容觸發(fā)緩存:
當(dāng)插入數(shù)據(jù)或更新數(shù)據(jù)時(shí),強(qiáng)制更新PHP緩存機(jī)制。
5、 靜態(tài)緩存:
這里所說(shuō)的靜態(tài)緩存是指靜態(tài)化,直接生成HTML或XML等文本文件,有更新的時(shí)候重生成一次,適合于不太變化的頁(yè)面,這就不說(shuō)了。
以上內(nèi)容是代碼級(jí)的解決方案,我直接CP別的框架,也懶得改,內(nèi)容都差不多,很容易就做到,而且會(huì)幾種方式一起用,但下面的內(nèi)容是服務(wù)器端的緩存方案,非代碼級(jí)的,要有多方的合作才能做到
6、 內(nèi)存緩存:
Memcached是高性能的,分布式的內(nèi)存對(duì)象PHP緩存機(jī)制系統(tǒng),用于在動(dòng)態(tài)應(yīng)用中減少數(shù)據(jù)庫(kù)負(fù)載,提升訪問(wèn)速度。
7、 php的緩沖器:
有eaccelerator, apc, phpa,xcache,這個(gè)這個(gè)就不說(shuō)了吧,搜索一堆一堆的,自己看啦,知道有這玩意就OK
8、 MYSQL緩存:
這也算非代碼級(jí)的,經(jīng)典的數(shù)據(jù)庫(kù)就是用的這種方式,看下面的運(yùn)行時(shí)間,0.09xxx之類的
9、 基于反向代理的Web緩存:
如Nginx,SQUID,mod_proxy(apache2以上又分為mod_proxy和mod_cache)
我們假定你的記錄是按照ID的倒敘排列的
那么你查詢的時(shí)候是 order by id desc
然后你要加上推薦的記錄,那么數(shù)據(jù)表里要加一個(gè)字段,專門來(lái)區(qū)分是否是推薦,我們?cè)O(shè)定這個(gè)字段為 recommends ,默認(rèn)為零,如果要是推薦你把這個(gè)字段設(shè)置為 1
然后查詢的時(shí)候 order by recommends desc,id desc
這樣就達(dá)到你的效果了
limit(offset,length)
查詢從offset開始的一共length條,limit(10)其實(shí)是limit(0,10),即從0開始共10條數(shù)據(jù)
select
*
from
table
limit
0,10
從0開始,共10條
SQL的limit語(yǔ)法的如以下形式
SELECT
*
FROM
table
LIMIT
[offset,]
rows
|
rows
OFFSET
offset
當(dāng)省略offset的時(shí)候,offset作為0處理,表示提取查詢到的前rows條數(shù)據(jù);
當(dāng)offset=0時(shí)候,表示提取查詢到的從offset開始的rows條數(shù)據(jù);此時(shí)如果rows0表示提取查詢到的從offset開始的所有數(shù)據(jù)
當(dāng)offset0的時(shí)候,表示提取查詢到的除出后rows條數(shù)據(jù)的所有數(shù)據(jù),即剔除last
row-rows到last
rows之間的-rows條數(shù)據(jù)
另外,如果rows大于實(shí)際查詢的數(shù)據(jù)條數(shù),則取rows為實(shí)際查詢的數(shù)據(jù)條數(shù)。
$result????=?mysql_query('select?*?from?mytable?limit?0,?20');
$i???????=?0;
while?($rs?=?mysql_fetch_array($result))
{
echo?$rs['myfield'].'?';
$i++;
if?($i?==?10)
{
echo?'br?/';
}
}