达利会议商店

时间:2013-01-01 10:26:30

标签: ruby-on-rails session dalli session-store

我已经谷歌搜索了很长时间,还没有找到解决方案。我正在使用Rails 3.2和Dalli gem与memcached 1.4.14。

我想使用Dalli / Memcached作为会话存储,但我不知道该怎么做。现在,Dalli缓存的工作方式类似于经典缓存,但不是会话缓存。我创建了一个新的rails应用程序,将Dalli添加到Gemfile:

gem 'dalli'

在开发和生产环境中,我将Dalli设置为缓存存储:

config.cache_store = :dalli_store

这是initializers/session_store.rb

的内容
require 'action_dispatch/middleware/session/dalli_store'
Rails.application.config.session_store :dalli_store, :memcache_server => ['127.0.0.1'], :namespace => 'sessions', :key => '_session', :expire_after => 30.minutes

我创建了一个Myooo模型,我在其中添加了列出和创建实例的方法:

def self.index_c
a = Rails.cache.read(:myooo_index)
if a.nil?
    puts '--->>> load again'
    a = Rails.cache.write(:myooo_index, Myooo.all, expires_in: 5.seconds)
else
    puts '--->>> using cache'
end
return Rails.cache.read(:myooo_index)
end

def self.create_c(myooo_object)
a = Rails.cache.read(:myooo_create)
if a.nil?
    a = Rails.cache.write(:myooo_create, myooo_object, expires_in: 10.minutes)          
end
return Rails.cache.read(:myooo_create)
end

在控制器中,我只是尝试访问缓存。在索引操作中:

@myooos = Myooo.index_c

并在创建动作中:

@myooo = Myooo.new(params[:myooo])
Myooo.create_c(@myooo)

我知道这是一个奇怪的脚本,但我需要了解我应该如何处理会话缓存并在实际项目中使用它。我花了很多时间在服务器大纲控制台上,让很多人试图了解正在发生的事情。缓存似乎像经典缓存,而不是会话缓存。

我很乐意得到帮助(ps:新年快乐):)

1 个答案:

答案 0 :(得分:0)

(我写了更长的文字cca 500 chars)是的你是对的,我说的是this。我正在构建大型应用程序,大约30个数据库表,其中所有都集中在用户表(对我来说它很大,我从来没有在最大的项目中工作)。当用户登录时,我想缓存用户声称的数据。对数据库有很多查询,所以我想缓存它们。还有其他方法可以解决我的问题并且不使用存储在会话中的缓存数据吗?

创建的例子只是关于测试...(不是真正的测试,但测试我,如果它正常工作)在opera我填写表单并调用create方法。我希望数据只存储给有Opera的用户。在视图中,我做了这样的事情:

 <% a = Rails.cache.read(:myooo_create) %>
 <% if !a.nil? %>
 <%= a.myi %><br/>
 <%= a.mys %>
 <% end %>

但是当我移动到firefox时,数据就在那里......所以我想,这个数据不会保存在会话缓存中,而是存储在“常规缓存”中。 (当然,这个观点代码太糟糕了!但是对于dalli研究,这很好;))