2012-12-14 16 views
1

根據https://github.com/mperham/dalli,我們可以配置多個Memcache服務器。但我不確定它是如何工作的。Dalli會在所有框中過期緩存嗎?

假設我們正在使用具有兩個服務器的memcache羣集:memcache1(box1)和memcache2(box2)。

  • 用戶A和用戶B共享相同的資源。
  • 用戶登錄並讀取緩存在box1中的共享資源。
  • 用戶B登錄並讀取緩存在box2中的共享資源。
  • 用戶A更新共享資源並在框1上過期緩存
  • 用戶B沒有看到更新的資源,仍然在box2中獲取緩存。

這是我的理解,到目前爲止,我不確定緩存過期如何在羣集環境中工作。 特別是,當我們想急於將緩存過期時,它會在所有盒子上過期嗎?

鑑於我們在兩條導軌服務器這樣一個相同的配置:

config.cache_store = :dalli_store, 'memcache1', 'memcache2' 

你怎麼看待這個用例?

感謝您的全部關注。

回答

9

Memcached分片是分片而不是複製。也就是說,每臺服務器上都沒有數據的副本;數據在服務器之間分配。

密鑰將只存在於一臺服務器上。 Dalli通過分配算法傳遞密鑰以確定哪個服務器將擁有給定的密鑰,然後將消息傳遞給該服務器。相同的密鑰不會存在於多臺服務器上,因此您不必擔心會同時過期使用這兩個密鑰。如果您過期了密鑰,它將在其所在的單個盒子上過期。

如果兩個用戶都通過相同的緩存鍵請求數據,那麼過期緩存鍵將使其無效;您不必擔心用戶1被路由到Box 1,用戶2被路由到Box 2,因爲給定的密鑰將始終映射到給定的服務器。

+0

謝謝你的好回答:) –