作用域:基于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 :)
这是一篇有趣的文章,其中有可能的解释:http://www.cakemail.com/namespacing-in-memcached/ – Nanne 2011-10-03 15:22:38