2016-01-15 85 views
3

我是Redis和Rails緩存的新手,並且想要執行簡單的模型緩存。剛纔我看到這2篇文章:Rails 4簡單模型緩存與Redis

http://www.sitepoint.com/rails-model-caching-redis/

http://www.victorareba.com/tutorials/speed-your-rails-app-with-model-caching-using-redis

由於Redis的模型緩存由在Redis的存儲JSON字符串,並與代碼檢索他們像

def fetch_snippets 
    snippets = $redis.get("snippets") 
    if snippets.nil? 
    snippets = Snippet.all.to_json 
    $redis.set("snippets", snippets) 
    end 
    @snippets = JSON.load snippets 
end 

我不瞭解需要使用什麼

gem 'redis-rails' 
gem 'redis-rack-cache' 

在這類示例中,我沒有看到緩存存儲或其他緩存機制在哪裏使用,因爲它們僅包含對Redis的讀/寫操作。

謝謝你的幫助。

+0

你的問題是什麼? – NateSHolland

+0

什麼是在這種情況下使用的寶石redis-rails和redis race-cache?我不明白他們的目的是什麼。 –

回答

8

以下是我在我的Gemfile

gem 'redis' 
gem 'readthis' 
gem 'hiredis' 
gem 'redis-browser' 

readthis - 最近實施了不錯的功能不會崩潰的Rails時Redis的下跌Disable Rails caching if Redis is down。它支持高級Redis數據類型(不僅僅是作爲redis-rails的字符串)。

hiredis - 快一點

Redis的瀏覽器 - 讓我看到什麼是真正的緩存(比CLI更容易)。

這裏是我的application.rb中

config.cache_store = :readthis_store, { expires_in: 1.hour.to_i, namespace: 'foobar', redis: { host: config.redis_host, port: 6379, db: 0 }, driver: :hiredis } 
在我的模型

然後我做:

def my_method_name 
    Rails.cache.fetch("#{cache_key}/#{__method__}", expires_in: 1.hour) do 
    # put my code here 
    end 
end 
我以前 https://github.com/MiniProfiler/rack-mini-profiler,看看哪些查詢解僱了大量的DB請求,並決定我應該緩存什麼

0

你發佈的代碼段並不是很聰明。它假定整個片段集合從不在本地更新,因爲它不會爲存儲到Redis中的內容設置任何到期日期。

至於寶石,你根本不需要它們,如果你的目標是你發佈的例子。

redis-rails可能是一個插件,用於連接到Rails中的Redis。但是,連接到Redis與創建初始化文件一樣簡單,並使用Ruby Redis gem通過正確的Redis URL打開與Redis的新連接。

第二個創業板似乎爲Rack cache添加了一個基於Redis的存儲。如果你不知道它是什麼,那麼如果你完全不使用它可能會更好。

+0

我同意,這是非常簡單的。我在模型中添加了after_save回調函數,以在每次創建新對象時清除緩存,特別是因爲在我的情況下,模型對象不會經常更改,並且只能由管理員更改/創建。正如你所說,使用redis初始化程序,我沒有得到爲什麼使用redis-rails,所以感謝指定。但redis-rails自述文件還包含config cache_store:redis_store。該行的唯一目的是能夠使默認緩存和Rails.cache而不是redis global var爲例嗎? –