我有一个ruby工作流程,它可以进行一些昂贵的API调用。我知道我们有一种更简单的方法来缓存Ruby on Rails中的东西,但是没有找到ruby脚本的任何常见ruby gem。
对于依赖纯ruby应用程序输入的方法缓存结果的最简单,最简单的方法是什么?
//pseudo code
def get_information (id)
user_details = expensive_api_call(id)
return user_details
end
答案 0 :(得分:4)
最简单的方法是使用哈希:
class ApiWithCache
def initialize
@cache = {}
end
def do_thing(id)
expensive_api_call(id)
end
def do_thing_with_cache(id)
@cache[id] ||= do_thing(id)
end
end
现在这会带来一些您可能想要研究的问题:
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用包含哈希的实例变量和||=
运算符来执行此操作,如:
def initialize
@user_cache = {}
# ...
end
def get_information(id)
@user_cache[id] ||= expensive_api_call(id)
end
||=
表示只有在左值(在这种情况下为@user_cache[id]
)为假(nil或false)时才执行方法调用并执行赋值。否则,将使用散列中已有的值。
答案 3 :(得分:0)
通过哈希全局变量
来做def get_information(id)
@user_details ||= {}
@user_details[id] ||= expensive_api_call(id)
return @user_details[id]
end
答案 4 :(得分:0)
尝试zache:
require 'zache'
zache = Zache.new
x = zache.get(:x, lifetime: 15) do
# Something very slow and expensive, which
# we only want to execute once every 15 seconds.
end
我是作者。