【问题标题】:Rails caching with memcached, get not working使用memcached进行Rails缓存,无法正常工作
【发布时间】:2013-01-14 21:10:05
【问题描述】:

我进入了一个声称使用 memcached 的现有 Rails 项目。作为测试,我尝试将一个对象放入缓存中

Rails.cache.write("gateway", @gateway)

然后用

检索它
 Rails.cache.read("gateway", @gateway)

然而这返回 nil,这是为什么呢?

这是在开发环境中,memcached 已安装并运行,应通过条目 config.cache_classes = true 和 config.action_controller.perform_caching = true 启用。

【问题讨论】:

  • 您是否在生产或开发/测试环境中看到了这种情况?开发/测试环境关闭缓存以捕获代码更改是相当常见的 - 请参阅here
  • +1 有用的建议
  • 你可以通过检查 Rails.cache 是什么类来检查使用了什么样的缓存

标签: ruby-on-rails ruby-on-rails-3 memcached


【解决方案1】:

Rails 项目以各种不同的方式使用 memcached,但如果您正在处理 rails 3 项目,那么我建议他们可能使用 'dalli' gem,它使用 memcached 会话存储。所以使用缓存可以改为session[:gateway] = @gateway 和相反的@gateway = session[:gateway],另一种方法是memcache.set('gateway',@gateway')memcache.get('gateway')

查看配置代码会很有帮助。检查/config/initializers/session_store.rb 类似Rails.application.config.session_store :dalli_store ............

正如 cmets 中所说,如果您在 开发中,缓存可能会被关闭。检查您的 config/development.rb 文件中的以下内容: config.action_controller.perform_caching = false

另一件事是你需要在你的操作系统上安装 memcached 对于 linux,这是 sudo apt-get install memcached 并且可以通过 ps aux | grep memcache 进行检查(这应该显示两个 proccesses grep 和 memcache)

更新

还应该查看rails caching guide

【讨论】:

  • 感谢您的良好反馈。 Memcached 肯定已安装并正在运行;我试图让它在开发环境中运行,我比较了生产和开发。配置。并将开发人员的缓存设置为 true。配置。无论我在哪里看到它。缓存读取仍然返回零。如果我使用 memcached 会话存储,4KB 大小限制不合适吗?我需要存储更多。
  • 您是否尝试过其他的读写方式?,memcached 的大小限制为 1mb,尽管这可以被覆盖(这将引发警告 - #WARNING: Setting item max size above 1MB is not recommended! #Raising this limit increases the minimum memory requirements, and will decrease your memory efficiency. 您可能还想查看压缩你在存储什么
  • 我使用 Rails.cache.write 进行写入,并尝试过 Rails.cache.read 和 Rails.cache.fetch,没有区别。我在写完并且初始写成功后立即进行读回(即读回正确的数据),但是在切换到下一个控制器时,读返回为零。我已经查看了您上面提到的所有设置,并且为 dev 启用了缓存。和生产环境。如果我不能让这个缓存工作,你能建议另一种在控制器调用之间传递数据的方法吗?
  • 如果你能告诉我你的应用的配置代码,我会知道它的存储位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2019-09-01
相关资源
最近更新 更多