2012-03-14 70 views
1

我從37個信號(here)找到標題爲How Basecamp Next got to be so damn fast without using much client-side UI的文章,但無法理解緩存失效如何工作。無效緩存和所有引用

讓的說:

我有陣列形式的post對象是這樣的:

$post = array(
    'id' => 3232, 
    'title' => 'Test Post' 
) 

我'將其保存在緩存鍵緩存命名爲:post-3232。我有一個latest posts陣列像這樣:

$latest = array(
    array(
     'id' => 3232, 
     'title' => 'Test Post' 
    ), 
    array(
     'id' => 3233, 
     'title' => 'Test Post 1' 
    ), 
    array(
     'id' => 3234, 
     'title' => 'Test Post 2' 
    ) 
) 

我在高速緩存中保存該列表與緩存鍵:latest-posts-140320121947

如何將我的最新文章列表的人都知道,如果任何職位被刪除,改變了或插入新帖子? 我無法從文章中找出它。也許我可以從StackOverflow找到一些幫助。

+0

如果您使用PHP,@cnkt,請嘗試symfony - 這已經有嵌套的緩存可用多年,從版本1.0開始。 (開啓緩存可見性真棒 - 你可以看到每個緩存塊上的實時緩存監視器有點像37信號圖片)。我沒有試過Symfony 2,幾乎是因爲1.3符合我的需求 - 但它也可能具有此功能。 – halfer 2012-03-18 14:08:53

+1

Symfony可能會這樣做,但我需要知道「我可以如何使用自己的代碼」,因爲我想了解此實現背後的邏輯。 – cnkt 2012-03-18 14:10:38

+0

感謝您的賞金。如果您有相關的後續問題,請在此處張貼。我可以鏈接到symfony 1.x實現嵌套的高速緩存碎片,如果這將是有用的。 – halfer 2012-03-23 22:02:06

回答

0

我的最新帖子列表如何知道是否有任何帖子被刪除,更改或插入了新帖子?

簡而言之,他們不能 - 緩存問題在於您故意提供舊數據。當然有時候沒問題。

但是,您可以使某些緩存無效。所以,如果你重寫了一篇文章,你應該使緩存失效,以便下一次查看它時會重新緩存新數據。像這樣的單個項目很容易。如果你有一個包含大量數據的緩存(比如分頁屏幕的緩存版本,比如最新文章,每頁一個緩存項),那麼更新一個緩存通常太尷尬/緩慢單表內的行。如果是這樣,那麼可以更好地爲未屏蔽的屏幕提供服務。但是,如果最新文章只包含最後10個項目,則爲整個緩存取消並重新繪製它。

可能已緩存的此頁面副本包含每個錶行的緩存項(即較大緩存表中的多個緩存行);但是,緩存區域越小,獲得的好處就越少。但是這肯定會讓它自己失去一行成爲更容易。

0

每點評:

櫻,它支持到活動記錄。 belongs_to :project, touch: true意味着當todolist時,項目會自動更新updated_at。

你需要在你自己的設置中實現這種依賴系統。

+0

我沒有使用活動記錄模式。此外,一個帖子和「最新帖子列表」不像親子關係船那樣相關。 – cnkt 2012-03-14 17:55:52

+0

我知道你沒有使用Active Record,因此「你需要實現」。帖子列表肯定會對各個帖子有「多」關係。這不會是你神奇的事情,你將不得不建立邏輯。 – ceejayoz 2012-03-14 18:32:58

+0

你能指導我閱讀任何關於如何實現這種行爲的代碼嗎? – cnkt 2012-03-14 18:34:02