ruby-on-rails - Redis模型缓存,什么时候调用items_helper中的fetch_items?

标签 ruby-on-rails postgresql caching model redis

我正在尝试将 Redis 用作我的应用程序和 PostgreSQL 数据库之间的缓存层。

请看下面,我的路线,items_controller,items_helper 文件。我对应该如何调用 items_helper 中的#fetch_items 感到困惑。

目前,我正在从我所有的 Controller 操作中渲染 jbuilder 模板。我需要保留此功能。

路线

Rails.application.routes.draw do
  resources :users
  resources :items
  get 'users/:id/sold_items' => 'users#sold_items'
  get 'categories/:id/available_items' => 'categories#available_items'

    get 'performances/:view' => 'performances#show'

items_controller.rb

class ItemsController < ApplicationController
    include ItemsHelper
  # Returns full list of items
  def index
    @items = Item.all
  end

  # Returns details for a single item
  def show
    @item = Item.find(params[:id])
  end
end

items_helper

module ItemsHelper

    def fetch_items
        byebug
        items = $redis.get("items")
        if items.nil?
            items = Item.all.to_json
            $redis.set("items", items)
        end
        @items = JSON.load items
    end

end

最佳答案

您需要手动调用 fetch_items,因为不会自动调用此方法。鉴于代码,我想你可以替换

@items = Item.all

@items = fetch_items

使用 fetch_items 方法。

附言。 fetch_items 方法不会返回 Item 对象数组,只会返回哈希数组,因此您可能还需要调整代码的其他部分。

我建议在将 Redis 投入生产之前对其进行基准测试,以确定在这种特定情况下使用 Redis 是否更快。

关于ruby-on-rails - Redis模型缓存,什么时候调用items_helper中的fetch_items?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38426308/

相关文章:

Android WebView 缓存

jakarta-ee - Ehcache 更新元素

postgresql - 为什么 PostgreSQL 不使用 trigram 索引

json - 带有 postgres 的 Django 的非关系数据库模式

html - 在网页上强制刷新图像的最佳方法是什么?

javascript - 在 HTML 中设置 Dropdown 的默认值 - 特殊情况

java - postgresql 查询的大型结果集

ruby-on-rails - 当数据库包含 100k 条记录时,rails find_or_create_by 很慢

ruby-on-rails - rspec - 如何测试不是数据库列的模型属性

ruby-on-rails - 超出范围错误,在 rspec 测试期间类型::整数