2008-12-09 62 views
8

我正在研究使用MemCached來開發我正在開發的Web應用程序,並且在過去幾天研究了MemCached之後,我遇到了一個我找不到答案的問題。如何將MemCached服務器連接在一起?

如何將Memcached服務器連接在一起,或者如何在MemCached服務器之間複製數據?

此外:是否由服務器或客戶端控制此功能,以及如何?

回答

5

我已經使用了BeITMemcached,並且您創建了MemcacheClient的實例並設置了您想要使用的服務器,就像字符串一樣。

在這一點上,客戶端自己確定哪些服務器可用來放入不同的項目。你永遠不知道哪一個項目將在。

檢查here to see how the servers handle failover

最簡單的事情是有一個重新填充機制。就我而言,我將數百個對象存儲在來自數據庫的memcache中。我可以調用重新填充並將它們全部放回原處。每當我添加,更新或刪除它們到數據庫時,我都會對這些memcache進行相同的調用。

7

當您設置多個服務器時,客戶端庫使用第一個散列來選擇存儲每個鍵/數據對的位置。這意味着沒有複製,並且每個客戶端都必須使用同一組服務器。

優點:

  • 幾乎爲零開銷,存儲和帶寬線性增長。
  • 服務器代碼保持簡單可靠。

缺點:

  • 在一組服務器中的任何改變(一個出現故障,或者添加一個新的)突然失效(幾乎)所有緩存。
  • 您必須確保在每個客戶端上使用相同的算法。

如果您控制客戶端的代碼,您可以簡單地將每個密鑰/數據對存儲在兩臺服務器上兩次。在從不同的客戶端閱讀時,一定要在相同的地方進行搜索。

+0

當然,這不是唯一的方法嗎? – 2008-12-09 13:35:31

+1

Consistant散列可以顯着限制由於重新散列到另一個服務器而失效的密鑰數量。這也取決於您擁有的服務器數量。 – 2009-01-16 15:00:20

1

這聽起來像你希望有緩存,可以用機器重啓等如果是這樣應付...

在很多情況下(假設你是不是寫Facebook)的關係數據庫管理系統是緩存不夠快。只需創建一個包含密鑰和blob列的表。如果RDBS服務器有足夠的內存,所有的數據都將在RAM中並保存到磁盤以便恢復。

請記住,這可能是與主數據庫服務器分開的服務器。

如果您希望獲得更多的樂趣並使用高端RDMS,則可以對用於構建刪除過期行的「緩存數據」的查詢設置更改通知從緩存中。

有人可以設置觸發器來清除緩存中的無效行,但這可能非常快速非常複雜。

0

Memcached不提供複製屬性。爲此,需要將服務器添加到memcached客戶端服務器列表中,然後點擊數據庫以將數據存儲在該特定服務器中。

0

您應該認真考慮CouchBase。它使用memcached協議,提供幾乎相同的速度,並提供您正在尋找的自動複製。它也堅持磁盤,所以你的緩存永遠不會冷。

相關問題