数据更改后重置memcache密钥数据

时间:2013-12-06 11:34:56

标签: php mysql sql caching

我一直在网上阅读关于memcache的内容。我找到了很多例子,讨论了使用memcache设置和检索数据的流程,例如。

REQUEST data key from memcache
IF key not found
THEN get data from DB and store result in memcache
ELSE get data from memcache

这非常好,直截了当,易于理解。我想要解决的是在对数据集进行更改后更新已定义密钥的最佳方法。

例如,如果我缓存以下查询:

SELECT * FROM user_info WHERE user = 26;

我可能会对SQL进行散列并将其用作密钥并将数据粘贴在其中。但是,如果我现在为用户26更新user_info表,更新缓存数据的最佳方法是什么,我将无法在不返回查询的情况下知道散列的SQL字符串。

我确实读过您在数据更改后再次运行SELECT查询但如果您有大量查询引用同一个表,这似乎有点尴尬。

无论如何,我想听听工作流建议。

1 个答案:

答案 0 :(得分:0)

  

计算机科学中只有两件事:缓存失效和命名事物。

     

- Phil Karlton

知道何时清除缓存非常困难。有很多方法,但我不确定是否有一个银弹解决方案。

根据您的具体用例,需要考虑一些方法:

1 - 基于密钥的缓存 - 在数据更改时更改缓存密钥 -     通常包括密钥中的时间戳:     http://37signals.com/svn/posts/3113-how-key-based-cache-expiration-works

2 - 使用以编程方式易于过期的密钥。例如在上面的情况下,密钥可以是

user_info_26

然后在任何

的方法中将任何更新包装到user_info
Update info for user 26
clear cache for key  user_info_26

然后将其视为代码中的原子操作。

3 - 有某种缓存清除程序异步作业。例如定期检查用户26的上次更新时间戳,如果与缓存数据不匹配,则清除缓存。

我确信还有很多其他策略,但正确的策略取决于应用程序的确切性质。