簡體   English   中英

用於php會話的Memcache聚類?

[英]Memcache clustering for php sessions?

這是一個小背景,目前我有

  • 3個Web服務器
  • 一個數據庫服務器,它還為3個Web服務器的php會話托管memcache。

我在3台服務器上有php配置指向memcache服務器進行會話。 它工作正常,直到為讀取等產生了很多連接,然后導致連接超時。

所以我現在正在考慮在每個Web服務器上聚集memcache以進行會話,我唯一關心的是如何確保所有服務器上的memcache具有相同的會話信息。

有人引導我去http://github.com/trs21219/Memcached-Library,因為我正在使用codeigniter但是我如何將我的php會話匯聚到此,因為memcache似乎是一個鍵值存儲? 提前致謝。

有誰檢查過http://repcached.sourceforge.net/並且有效嗎?

我不確定你對其設計師的memcache有同樣的期望。

但是,首先,memcache分發的工作方式與您預期的不同:沒有機制來復制存儲的信息。 正如您所注意到的,每個memcache實例都是一個簡單的鍵值存儲。 分發由客戶端代碼完成,客戶端代碼具有所有已配置的memcache實例的列表,並執行密鑰的散列以將其定向到其中一個實例。 客戶端可以將它存儲在任何地方並在本地檢索它,或者為了冗余而多次哈希它,但這些並不是簡單的練習。

但另一個問題是memcache是​​為合理的短期數據而設計的,memcache可以隨時丟棄。 這使得緩存經常訪問的數據非常有用,這些數據可能有點陳舊(比如說幾分鍾之前),但檢索起來可能很昂貴(例如從查詢生成幾乎一分鍾)。

根據我的經驗,PHP會話並不符合這一要求。 數據庫可以輕松支持數千個PHP會話,幾乎沒有可見的流量,但是你需要大量的memcache存儲來支持相同的數量:每個會話50k,5000個會話意味着接近256Mb,然后還有你想要的所有其他數據放在那里。 沒有足夠的存儲空間,您會得到大量無法解釋的注銷(因為內存壓力時,memcache會丟棄會話數據),因此很多煩惱的用戶必須再次登錄。

沒有必要使用某些第三方庫來組織memcached“cluster”。

http://ru.php.net/manual/en/memcached.addserver.php

只需使用此功能將多個服務器添加到池中,然后將數據存儲並分發到這些服務器上。 將根據一致的密鑰分發選項選擇用於存儲/檢索特定密鑰的數據的服務器。

所以在這種情況下,你不必擔心“如何確保所有服務器上的memcache具有相同的會話信息”

我們發現在大多數事情上使用MongoDB而不是MySQL都有很大的優勢,包括會話處理。 它更快,更小,更容易。 我們保留MySQL以滿足交易需求,但其他一切現在都進入了Mongo。 我們已經將memcache降級為簡單地緩存頁面和其他不重要的數據,如果它存在與否,就像smarty那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM