做web,經(jīng)常會(huì)用到key-value的緩存,雖然快,但緩存的維護(hù)是個(gè)問(wèn)題,就拿sgementfault舉例來(lái)說(shuō),如果我來(lái)做,首頁(yè)的問(wèn)題分頁(yè)就涉及到
1.問(wèn)題總數(shù)緩存
2.每頁(yè)問(wèn)題清單緩存
現(xiàn)在管理員刪除了一個(gè)問(wèn)題,那麼為滿足實(shí)時(shí)性,肯定需要更新緩存
1.問(wèn)題總數(shù)緩存-1
2.每頁(yè)問(wèn)題清單緩存如何更新?
當(dāng)然可以查數(shù)據(jù)庫(kù)算出來(lái),是否有這個(gè)必要?
這隻是個(gè)例子,為了說(shuō)明問(wèn)題,為了更新一個(gè)緩存而造成了另外的數(shù)據(jù)庫(kù)查詢(xún)開(kāi)銷(xiāo)。在實(shí)際過(guò)程中,我經(jīng)常用查詢(xún)條件的組合作為key,這使得我在更新緩存時(shí)無(wú)從下手(雖然我自己手工維護(hù)了一個(gè)緩存key的清單,但難免會(huì)有遺漏,終歸不是好辦法)。但如果把緩存的key都定義死,則緩存的使用不是那麼靈活。
擁有18年軟件開(kāi)發(fā)和IT教學(xué)經(jīng)驗(yàn)。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項(xiàng)目經(jīng)理、高級(jí)軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...
建議如此處理:
1. 問(wèn)題總數(shù)快取
$memcached->increment('sum', $sum);
參考:http://www.php.net/manual/zh/memcache...
2.每頁(yè)問(wèn)題清單快取如何更新?
沒(méi)有細(xì)想,如果是我的話可能會(huì)用一個(gè)end_id作為結(jié)束戳,然後有新的問(wèn)題過(guò)來(lái)就向前遞增,每100+匯總一次刷新,主要還是看量,脫離了量的情況下不好判斷(開(kāi)始小的情況下就直接刷db三分鐘一次也沒(méi)問(wèn)題)
1. 問(wèn)題總數(shù)快取的用@jawa 提供的 memcache incr/decr 就挺好的
2. 每頁(yè)問(wèn)題清單,這個(gè),可以不維護(hù)清單而只快取問(wèn)題內(nèi)容,清單本身從資料庫(kù)查就好。也的確是如@jawa 所說(shuō),看量。細(xì)節(jié)上可以有很多解決方案,有非常粗粒度的方法,比如前面說(shuō)的列表本身直接從數(shù)據(jù)庫(kù)查;也有非常細(xì)的方法,比如新浪微博的內(nèi)容轉(zhuǎn)發(fā)、評(píng)論次數(shù)都是二次獲取,解耦了內(nèi)容的變化(較少)和計(jì)數(shù)的變化(頻繁)
使用快取主要目的是為了減輕資料庫(kù)的壓力,過(guò)於頻繁的更新快取是不太合理的。
一、放棄即時(shí)性,當(dāng)資料到達(dá)某個(gè)定義的閥值時(shí)更新快取。
二、使用搜尋引擎如sphinx的即時(shí)增量索引。