gpt4 book ai didi

ruby-on-rails - 事件资​​源缓存

转载 作者:行者123 更新时间:2023-12-02 17:51:18 26 4
gpt4 key购买 nike

您将如何缓存 ActiveResource 模型?最好在 memcached 中。现在它可以很好地从我的 REST API 中提取模型,但每次都会提取数十条记录。最好缓存它们。

最佳答案

我一直在玩同样的东西,我想我已经找到了一种非常简单的方法来首先检查 redis 中的缓存对象。这仅在您使用 find 方法时有效,但对于我的需求,我认为这已经足够了。

通过覆盖查找,我可以检查参数的校验和,看看我是否已经将响应保存在 redis 中。如果这样做,我可以从 Redis 中提取 JSON 响应并在那里创建一个新对象。如果我不这样做,我会将查找传递给 ActiveResource::Base 的查找,然后会发生正常操作。

我还没有使用 ActiveResource 实现将响应保存到 redis 中,但我的计划是在其他地方填充这些缓存。这样,通常我可以依赖我的缓存,但如果它们不存在,我可以回退到 API。

class MyResource < ActiveResource::Base
class << self
def find(*arguments)
checksum = Digest::MD5.hexdigest(arguments.md5key)
cached = $redis.get "cache:#{self.element_name}:#{checksum}"
if cached
return self.new JSON.parse(cached)
end

scope = arguments.slice!(0)
options = arguments.slice!(0) || {}
super scope, options
end
end
end

还有一个小补丁,这样我们就可以为我们的数组获取一个 md5key:

require 'digest/md5'

class Object
def md5key
to_s
end
end

class Array
def md5key
map(&:md5key).join
end
end

class Hash
def md5key
sort.map(&:md5key).join
end
end

这有帮助吗?

关于ruby-on-rails - 事件资​​源缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com