2010-03-19 81 views
4

我開始學習memcache的好處,並希望在我的項目中實現它。我已經理解了它的大部分內容,比如數據如何被密鑰等檢索。從memcache中檢索數據

現在我明白了,我可以在memcache中放置所有詳細信息的帖子,並調用密鑰POST:123,這沒關係,我可以爲每個帖子完成它。

但是,如何處理案件,當我查詢表posts獲得所有職位的名單與他們的標題。這可以通過memcache完成,還是應該從表中查詢?

回答

3

Memcache是​​一個鍵值緩存,正如您所描述的那樣,它通常用於您確切知道要檢索哪些數據的情況(即,它不用於查詢和返回未知的結果列表基於一些過濾器)。

通常,目標不是將所有數據庫查詢替換爲使用memcache調用,尤其是在不需要優化的情況下。

假設數據不適合單個值,並且您確實需要快速訪問表中的所有數據,則可以考慮基於某個塊值將其轉儲到鍵中,如時間戳範圍。

但是,可能最好保留數據庫查詢或直接將其加載到內存中(如果我們正在討論一個寫入所有更新的單個服務器)。

1

你可以有一個名爲「posts」的鍵值爲「1,2,3,4,10,12」,然後更新,每次創建,更新,刪除時檢索它。

在任何情況下,memcached都不是數據庫的替代品,它是一個鍵/值存儲(快速且可擴展的存儲)。所以你必須決定在DB中存儲什麼數據以及什麼卸載到memcached。

另外,您可以使用「cachemoney」插件,它會做讀/寫,通過在內存中(即使是在分佈式緩存)

0

基本上,你應該做你的AcriveRecord緩存它首先檢查緩存,看它是否有您需要的信息。如果緩存中沒有任何內容(或緩存的數據已過時),則應查詢該表並將返回的數據放入緩存中,並將其返回到前端。

這有幫助嗎?

0

您無法枚舉memcached內容 - 它不是按照您嘗試的方式設計的。您需要存儲完整的SQL查詢結果集而不是單個記錄。

所以,是的:做一個SELECT title FROM posts並將結果存儲在memcached中(例如POSTS:ALL_UNORDERED)。這是它的設計。是的,如果查詢像SELECT * FROM posts WHERE id = XX這樣的單個記錄,然後存儲該記錄。只要記住爲每個執行的查詢創建獨特的memcached密鑰。

0

據我所知,你不能查詢多個鍵和值。但是,如果您需要經常訪問相同的帖子列表,爲什麼不用像memcache中的「帖子」這樣的密鑰來存儲它。

1

看看來自Twitter的cache_money寶石。這個gem增加了ActiveRecord級別的緩存。 通過ID查找調用將通過緩存。您可以添加對錶格中其他字段的索引支持(即你的情況title

class Post < ActiveRecord::Base 
    index :title 
end 

現在查找調用由標題過濾器將經歷高速緩存。

Post.all(:conditions => {:title => "xxxx"})