2011-03-25 59 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。这看起来像是对这个问题的真实答案。尽管我们不会很快使用它,因为它已经很老了,似乎没有积极的发展。