2014-03-31 37 views
2

libmemcached做任何本地緩存對象嗎?另一種方法是如果memcached_get()調用和通過網絡發送的請求之間存在1:1對應關係?如果我連續兩次請求對象「A」,是否發出2個請求?libmemcached是否執行任何本地緩存?

如果它沒有做任何緩存,是否有首選的方法或庫來做這種緩存?

編輯:@ mikewied在下面的答案表明,可能多一點解釋是爲了。我的用例如下:我將存儲在緩存中的數據是不可變的,所以我不必擔心失效;對客戶端(進程內)緩存的期望是由應用程序將重複訪問大量緩存對象的事實所驅動的,所以每次導致網絡往返時間都會導致應用程序相對減慢。

回答

1

libmemcached不做任何緩存,如果你想這樣做,那麼你可能不得不自己實現一些東西。我辯論是否只發布這個作爲評論,因爲我沒有任何關於客戶端緩存庫的建議,但是我決定發佈一個答案,因爲我很好奇爲什麼客戶端緩存對你的應用程序如此重要(以及其他人也可能正在閱讀這個問題)。首先,如果你這樣做,你將有一個緩存失效問題。設想兩個客戶端將數據設置到同一個memcached服務器。如果您的客戶不同步,他們將提供冷數據。很明顯,您可以在存儲客戶端的每個值上使用ttl,但仍會存在一些不一致之處。也許這沒問題,但是你必須問自己,memcached提供給你的亞毫秒延遲是否對你的應用來說太慢了。另外請記住,您的用戶可能離您的數據中心很遠,並且一旦它離開您的應用程序,可能需要一兩秒鐘才能獲取數據。在這種情況下,考慮到所有其他增加的延遲,亞毫秒真的太慢了​​嗎?我想提到的最後一件事是,如果在正確的硬件上設置memcached並正確編寫應用程序,則可以在商品硬件上執行200,000次操作/秒。我甚至看到人們在一臺服務器上完成了超過50萬操作/秒的基準測試。這意味着在超載memcached之前,您更可能使網絡飽和。 (也許這是你試圖避免的問題)

反正,我知道這可能不是你尋找的答案,但我見過很多人最近要求客戶端緩存的東西,並在很多案例我只是不明白爲什麼人們認爲這是必要的。爲了清楚起見,您可能想要添加這個應用程序有很好的理由,但我認爲任何人都認爲添加它應該真的試圖找出是否有必要。我希望這不會過於苛刻。我真的認爲它是有幫助的。你可能有完美的用例,如果是的話,也許別人會發現我在這裏添加的一些東西很有用。

+0

謝謝。我在上面添加了更多的上下文。 – brooks94

相關問題