我在用 graphql
我的rails api。使用 redis
用于缓存存储。
在graphql查询中,我使用缓存优化性能:
graphql/types/query\类型.rb
field :labels, [Types::LabelType], null: false do
description 'Get all food labels'
end
def labels
Rails.cache.fetch("labels", expires_in: 24.hours) do
Label.all
end
end
在数据库中植入10个标签,当我在中测试查询时 localhost:3000/graphiql
,正确显示了10个结果。但是,如果在数据库中手动删除一行,它将返回9条记录,而不是缓存的10条结果。
以下是我的环境配置:
配置/environments/development.rb
if Rails.root.join('tmp', 'caching-dev.txt').exist?
config.action_controller.perform_caching = true
config.cache_store = :redis_cache_store, { url: ENV.fetch("REDIS_URL_CACHING", "redis://localhost:6379/0") }
config.public_file_server.headers = {
'Cache-Control' => "public, max-age=#{2.days.to_i}"
}
else
config.action_controller.perform_caching = false
config.cache_store = :null_store
end
我跑了 rails dev:cache
而且有 caching-dev.txt
在 tmp
目录。我错过了什么?
1条答案
按热度按时间e0uiprwp1#
我发现了类似的问题并尝试了他们的答案。建议的解决方案有:
负荷模型:
Label.all.load
(rails 5.2.1-模型和片段缓存)将它们转换为数组:
Label.to_a
(Rails4中的低级缓存)将结果存储到局部变量:
labels = Label.all
(rails 4低级缓存不工作)第一个和第二个工作正常。
graphql/types/query\类型.rb
提示:每当您更改缓存块时,在rails控制台中运行rails.cache.clear
问题是它是块
Label.all
是缓存的,不是结果。无论我如何更改块,它已经被缓存,所以结果不会被缓存。
我跑了
Rails cache clear
在rails控制台中,它工作正常。