2013-02-10 40 views
0

我已經工作了內存緩存的最後一個星期左右的時間,我已經設法解決如何設置鍵/刪除鍵。這很好,但我仍然試圖找出如何在結果的一段時間內做同樣的事情。Memcache - 如何防止頻繁緩存重建?

例如,我將有職位while循環,從邏輯中的功能將檢查是否內存緩存設置,如果沒有它會收集結果,並創建註冊表項。我的問題是這樣的,如果我已將循環數據設置爲設置鍵並顯示設置鍵(最新),那麼在插入新帖子時會發生什麼?據我所知,我可以在設定的關鍵字上設定一個時間限制,但是隻要看起來設置一個限制仍然可以顯示舊帖子,內容將會/可以被添加。所以我的問題是我將如何能夠更新設置密鑰。

我能想到的一個可能的解決方案的唯一方法是在用戶插入一個新的職位,這將刪除鍵,而當所有帖子再次看到這是當鑰匙被重新設置。但這似乎相當反效果,就好像有10個用戶提交帖子,然後所有的帖子都會一遍又一遍地重複(看起來好像沒什麼好處)

我希望這是有道理的,任何幫助或指導將不勝感激。

回答

0

是,如果你刪除鍵時,有一個新的職位,你所指定的場景將發生。爲了避免這種情況,您可以使用a)memcache的過期或b)維護自己的作業系統來控制緩存重建的閾值。

內存緩存的到期

PHP有兩個Memecache PECL插件即MemcacheMemcached。 Memcached(注意d後綴)支持一種名爲touch的方法,它允許我們爲現有項目設置新的到期時間。假設您將緩存設置爲2小時,當出現新帖子時,我們可以使用touch將截止時間設置爲10分鐘。因此,如果在接下來的10分鐘內有新帖子,緩存將只重建一次。這種技術被稱爲技術術語的去除。

一些代碼:

$_memcached = new Memcached; 
if(!$_memcached->addServer('localhost',11211)) 
{ 
    $_isConnected = FALSE; 
} 
else 
{ 
    $_isConnected = TRUE; 
} 

$_memcached->touch($key, $expiry); 

$_memcaced->add($key, $value, $expiry); 

請注意:這僅僅是爲了示例,請創建一個單獨的類,並使用它。

如果您必須使用舊的Memcache插件,則只能使用(原子)getset的組合複製touch的行爲。

作業系統

如果你有一個工作系統然後每出現一個新的職位時,將通過作業聚合執行以控制頻率的緩存重建提交作業。

與Memecached去似乎是最好的辦法。

+0

感謝貝拉那是有幫助的。我已經安裝了Memcached,這似乎是兩者中較好的一個(儘管我已閱讀的絕大多數文章主要針對Memcache)您能否提供一個使用觸摸方法的簡單示例(或者在線知道任何示例?)我會嘗試用一些代碼更新我的問題,以說明我如何處理這個問題。關於觸摸方法。 – HireLee 2013-02-10 13:18:29

+0

@LeeMarshall我用一些代碼更新了答案。基本上你需要調用'touch'來調用'add'來存儲最新帖子。 – Birla 2013-02-10 13:46:32

+0

我明白你的意思,我說的觸摸方法不會允許另一個重建,直到觸摸方法失效已經發生?這是正確的嗎?在給定的時間內防止大量重建(在上面的示例中,這將是10分鐘) – HireLee 2013-02-10 13:58:52