最後更新時間 2009-04-10 更新人 dormando@rydia.net
這裡收集了經常被問到的關於memcached的問題
- 效能方面的問題
- memcached沒有我的database快,為什嗎?
- 用戶端庫方面的問題
- memcached有哪些用戶端庫?
- 使用不同的用戶端庫,能夠訪問到memcached中相同的資料嗎? (不同用戶端庫的可以協作嗎?)
- 什麼是一致性雜湊的用戶端?
- 用戶端FAQ
效能方面的問題
Memcached沒有我的資料庫快,為什嗎?
在一對一比較中,memcached可能沒有您的SQL查詢快。但是,這不是memcached的設計目標。Memcached的目標是延展性。當串連和請求增加的時候,memcached的效能將比大多數資料庫好。您可以先在高負載的環境(並發的串連和請求)中測試您的代碼,然後再決定memcached是否適合您。
用戶端庫
memcached有哪些用戶端庫?
看看上面的"如何訪問memcached"小節。
使用不同的用戶端庫,可以訪問到memcached中相同的資料嗎?
從技術上說,是可以的。但是您可能會遇到下面三個問題:
- 不同的庫採用不同的方式序列化資料。舉個例子,perl的Cache::Memcached使用Storable來序列化結構複雜的資料(比如hash references, objects, 等)。其他語言的用戶端庫很可能不能讀取這種格式的資料。如果您要儲存複雜的資料並且想被多種用戶端庫讀取,那麼您應該以簡單的string格式來儲存,並且這種格式可以被JSON、XML等外部庫解析。
- 同樣,從某個用戶端來的資料被壓縮了,從另一個用戶端來的卻沒被壓縮。
- 各個用戶端庫可能使用不同的雜湊演算法(階段一雜湊)。在串連到多個memcached伺服器端的情況下,用戶端庫根據自身實現的雜湊演算法把key映射到某台memcached上。正是因為不同的用戶端庫使用不同的雜湊演算法,所以被Perl用戶端庫映射到memcached A的key,可能又會被Python用戶端庫映射到memcached B,等等。Perl用戶端庫還允許為每台memcached指定不同的權重(weight),這也是導致這個問題的一個因素。
什麼是一致性雜湊的用戶端?
一致性雜湊演算法是a new approach to managing the first-layer hashing system for memcached clients。這裡有一篇文章很好地解釋了它的用處:http://www.last.fm/user/RJ/journal/2007/04/10/392555 。
用戶端FAQ
目前有一些記錄:
用戶端可以通過"首碼"來給key設定一個域(命名空間)。例如,在一個共用主機的環境中,您可以將客戶姓名作為"首碼",為key建立一個特定的域。在儲存資料的時候,"首碼"可以用在key上,但是不應該參與雜湊計算。目前,memcached自己還沒有實現針對複雜結構資料的序列化方法,JSON則是一種被廣泛使用的對象序列化格式。