【问题标题】:Rails 4 Simple Model Caching With RedisRails 4 使用 Redis 进行简单模型缓存
【发布时间】:2016-04-21 08:48:47
【问题描述】:

我是 Redis 和 Rails 缓存的新手,想执行简单的模型缓存。我刚刚阅读了这两篇文章:

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

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

由于 Redis 模型缓存包括将 JSON 字符串存储在 redis 中并使用类似的代码检索它们

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 的读取/写入。

感谢您的帮助。

【问题讨论】:

  • 你的问题是什么?
  • 在这种情况下,redis-rails 和 redis race-cache 有什么用?我不明白他们在这里的目的是什么。

标签: ruby ruby-on-rails-4 caching model redis


【解决方案1】:

这是我的 Gemfile 中的内容

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

readthis - 最近实现了一个不错的功能,当 Redis 关闭时不会使 Rails 崩溃Disable Rails caching if Redis is down。它支持高级 Redis 数据类型(不仅仅是字符串作为 redis-rails)。

hiredis - 快一点

redis-browser - 允许我查看实际缓存的内容(比 cli 更容易)。

这是我的应用程序.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 来查看哪些查询正在触发大量数据库请求并确定我应该缓存什么。

【讨论】:

    【解决方案2】:

    您发布的 sn-p 并不是很聪明。它假定整个 sn-p 集合永远不会在本地更新,因为它没有为存储到 Redis 中的内容设置任何过期时间。

    至于宝石,如果您的目标是您发布的示例,则根本不需要它们。

    redis-rails 可能是在 Rails 中连接到 Redis 的插件。但是,连接到 Redis 就像创建初始化文件并使用 Ruby Redis gem 使用正确的 Redis URL 打开到 Redis 的新连接一样简单。

    第二个 gem 似乎为 Rack cache 添加了基于 Redis 的存储。如果你不知道它是什么,最好不要使用它。

    【讨论】:

    • 我同意,这非常简单。我在模型中添加了一个 after_save 回调,以便在创建新对象时清除缓存,特别是因为在我的情况下,模型对象不会经常更改,并且仅由管理员更改/创建。正如您所说,拥有 redis 初始化程序,我不明白为什么要使用 redis-rails,所以感谢您指定。但是 redis-rails README 还包括配置 cache_store 到 :redis_store。该行的唯一目的是能够使其成为默认缓存并调用 Rails.cache 而不是例如 redis 全局变量?
    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 2018-02-13
    • 2016-09-04
    • 2021-08-29
    • 2019-02-15
    • 2021-11-27
    • 2014-05-07
    • 2018-10-12
    相关资源
    最近更新 更多