我試圖緩存rails請求到需要proc的外部服務。使用Proc作爲緩存的關鍵
對於我來說,能夠區分2個請求,它的重要性在於proc是Rails緩存鍵的一部分。
但是,具有相同proc和proc代碼中的值的多個請求仍然會每次評估爲不同的proc對象。
如:
#<Proc:[email protected]/Users/app/development/work/runner.rb:10>
#<Proc:[email protected]/Users/app/development/work/runner.rb:10>
因此,我得到高速緩存未命中即使是同樣的請求。
如何在緩存鍵中使用block/proc,如果procs在代碼和變量值方面相同,則評估結果相同。
服務電話是一樣的東西
def some_method
call_service do
a= 3;
b=6
end
end
def call_service(block)
Rails.cache.fetch(Date.today, block) {
external_service(&block)
}
end
I want to be able to compare blocks :
eg
{a=3, a*a} == {a=3, a*a} => True
{a=3, a*a} == {a=4, a*a} => false
{a=3, a*a} == {a=4, a*a*a} => False
我試圖用,
block.source
RubyVM::InstructionSequence.of(block).disasm
但他們沒有抓住塊的狀態,即變量的值(A = 3等等)
在rails中實現這種類型的緩存的最佳方式是什麼?
P.S:
使用Rails4和reddis作爲緩存