我在网络上搜索了很长时间,找不到任何缓存系统,它允许我在缓存中添加多个标签,以便在数据库更新时能够删除它,有人知道是否存在这样的东西吗?
让我详细告诉你我想做什么。我有一个PHP网站,在MySQL数据库中有非常繁重的查询要做(有些页面要显示4000多个查询)。因此,我们的想法是缓存这些查询以减少数据库的使用。另一方面,我需要这些信息,以尽快更新时,数据库。
作用域只清除需要更新的缓存,而不是一次清空所有缓存,因为行中有一个轻微的更改,只影响一个页面。有没有办法用标签解决这个问题?
我已经看到了Fastcached和BrennoCache,但是唯一允许1个标记…
[编辑]:
我已经完成了使用FastCache、使用TTL和用命名系统标记所有缓存元素来清空任何可能需要清空的缓存。缓存也被应用到可能最小的信息部分,这意味着缓存的色调,但很少的信息缓存。意思是更容易清空正确的一点。这样我们就可以从4233个查询转到17个页面。

最佳答案

Microsoft有一个名为AppFabric的缓存,它允许您将标记列表分配给缓存中的项。http://msdn.microsoft.com/en-us/windowsserver/ee695849.aspx
你原来的问题。。。
根据我的经验,我绝对建议不要尝试标记缓存中的项目以进行主动逐出。
几年前我试着用AppFabric做你想做的事情,但遇到了很多问题。例如,让我们考虑一个销售产品的网站。每个产品都有一个ID。
问题:
产品最终被我们的问题所困扰。我们有一个单独产品的页面。分类产品。它持续不断。如果我们有一个缓存项有100个产品,它有100个标签吗?这很快就变得难以管理。
假设一个产品在100个不同的缓存对象中。在我们找到每个缓存项并将其逐出所需的时间内,该项可能已再次更改!换句话说,在处理不断变化的数据时,您必须考虑事务。如果您正在使用高速缓存进行“写”操作,是否会阻止另一个写操作以避免竞争?
即使你设法从(2)中找出复杂性,我也认为执行起来还需要时间。如何向用户反映这一点?
我的缓存建议:
始终使用TTL,如果可以,让缓存中的项目过期。努力改变你的想法并使用这种方法。如果您可以将90%的数据移到这种方法中,那么您的代码将更加简单和易于维护。
对于无法移动到(1)的项,请确保它们位于缓存中的一个位置。这意味着不需要标记项目。需要重新分解才能使所有内容都引用该项,但这是值得的。这样当你需要一个项目过期时,你只需要打一个电话,就很简单了。一旦完成,每个人都会得到最新的数据。

10-07 13:07
查看更多