導航:上一頁
我們經常需要給某些數據表添加一些需要經常更新的統計字段,例如用戶的積分、文件的下載次數等等,而當這些數據更新的頻率比較頻繁的時候,數據庫的壓力也隨之增大不少,我們可以利用高級模型的延遲更新功能緩解。
延遲更新功能是指我們可以給統計字段的更新設置一個延遲時間,在這個時間段內所有的更新會被累積緩存起來,然后定時地統一更新數據庫。這比較適合某個字段經常需要遞增或者遞減,并且對實時性要求沒有那么嚴格的情況。
我們先來看遞增的情況,如果我們需要給會員累積積分,可以使用$User = D("User"); // 實例化User對象
// 把id為5的用戶的積分加10
$User->setInc("score","id=5",10);
$User->setInc("score","id=5",30);
上面的操作更新了兩次用戶積分,并且都實時保存到數據庫.如果我們使用延遲更新方法,例如下面對用戶的積分延遲更新60秒
PHP代碼
$User->setLazyInc("score","id=5",10,60);
$User->setLazyInc("score","id=5",30,60);
$User->setLazyInc("score","id=5",10,60);
那么60秒內執行的所有積分更新操作都會被延遲,實際會在60秒后統一更新積分到數據庫,而不是每次都更新數據庫。臨時積分會被累積并緩存起來,最后到了延遲更新時間,再統一更新。相當于在60秒后執行了:
PHP代碼
$User->setInc("score","id=5",50);
效果是等效。區別在于用戶數據庫中的積分不是實時的。同樣,還可以使用setLazyDec進行延遲更新操作。