gpt4 book ai didi

ruby-on-rails - 是否有用于 Rails 的良好缓存内存插件?

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:07 26 4
gpt4 key购买 nike

我有一个模型:

class Account < ActiveRecord::Base

has_many :payments
has_many :purchases

def balance
payments.sum(:dollar_amount) - purchases.map{|p| p.dollar_amount}.sum
end

end

我想记住余额方法并将其存储在 memcached 中。当然,问题在于每次创建付款或购买时缓存值都需要过期。我可以在付款和购买的 after_save 回调中插入代码以使他们帐户的缓存余额过期,但在我看来,如果我可以这样说的话,它会更容易理解/维护:

cached_memoize :balance, :depends_on => [:payments, :purchases]

是否有现有的 gem/插件可以执行此操作?在我开始自己写之前,这是个好主意吗?我看到的缺点是,对于正在修改 Purchase 的 dollar_amount 方法的人来说,他们需要考虑缓存问题可能不太明显(如果他们无意中引入了对另一个模型的依赖,比如 SubPurchase 或其他东西,它会把事情搞砸。)但由于这无论如何都不是很明显,我认为拥有一个简洁的声明性语法是值得的 - 至少在它崩溃时,很清楚如何修复它。

想法?

编辑:为了回应 semanticart 的回答,我将更明确地说明我的问题,即“只需将过期时间放在相关回调中”的方法——问题是你最终会在整个代码库中过期——它以after_save 支付回调,但也许它在一个单独的购买观察者中,然后你有多态关联、继承树等。我提议的语法迫使开发人员将所有这些情况放在一个整洁的列表中的一个地方。这样,当您收到诸如“用户余额有时不同步并且他们不太确定如何重现该问题”之类的错误报告时,就更容易弄清楚发生了什么。

最佳答案

我会考虑另一种方法:在帐户上有一个余额字段。在 Purchase 和 SubPurchase 模型上使用回调(after_save 等)来更新父帐户上的余额字段。您的余额只会在其他模型被修改时发生变化,您永远不必担心它会过时。

关于ruby-on-rails - 是否有用于 Rails 的良好缓存内存插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/841493/

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