2011-03-25 25 views
-1

作用域:基於PHP-mysql的站點,使用memcached。
緩存問題主要是關於價格。由於價格計算與多種因素(包括特定產品組合)直接相關,所以可能存在大量可能的價格。爲失效/重新計算分組/標記緩存值

當價格計算所需的其中一個數字更新時,很多緩存的項目應該失效。並非所有的組合都在緩存中,並將它們全部放在那裏並不可行,或者至少不需要。

我想要的是無效(或更新)與該單一產品有關的所有價格。因爲它們是組合,所以它不是一個簡單的事實,它可以使某個特定名稱的鍵失效(例如參見示例)。

我的理想情況是能夠標記所有對該條目有影響的產品的緩存條目,這樣我就可以「發現」它們。

總結/作爲例子:
我有15個產品。在這些產品中有目前在我的緩存:

1) "price_product1_product2"   => 200 
2) "price_product1_product3"   => 300 
3) "price_product5_product12"   => 250 
4) "price_product4_product1_product12" => 203 

現在的產品1成爲我們購買更昂貴的,因此基於該產品的所有價格需要重新計算。我不想過多涉及product1的所有可能的組合,因爲那將包括太多的密鑰,它們中的大部分都不應該在緩存中。

我想到的一個解決方案是memcached不支持的,它是將緩存條目1,2和4標記爲「product1」(以及其他產品),所以我可以很容易地找到它們。我可以通過將所有使用的密鑰保存在數據庫中來模擬此行爲,但我擔心這隻會減慢速度,速度是緩存的原因之一。

這將是一個解決方案?
有沒有其他的緩存系統可以做到這一點?
有沒有辦法用當前的設置快速做到這一點?
小費?

#我有更多的產品ofcourse :)

回答

0

目前的共識(離線)似乎是沒有這樣的'默認的緩存可用的系統。最接近的解決方案是使用一些表單數據庫(NoSQL,MongoDB)並自己編寫代碼。

+0

這是一篇有趣的文章,其中有可能的解釋:http://www.cakemail.com/namespacing-in-memcached/ – Nanne 2011-10-03 15:22:38

0

一位朋友指出我對這個選項memcached-tag。這看起來像是對這個問題的真實答案。儘管我們不會很快使用它,因爲它已經很老了,似乎沒有積極的發展。