【发布时间】:2011-12-08 20:05:44
【问题描述】:
我开始向我的应用程序添加一个 memcached 层。到目前为止一切顺利。
然而,我很快意识到,当有人将文件上传到网站时,我需要一次性使大量密钥无效/删除,以保持数据的相关性。
我已经阅读了一些内容,解决此问题的最常见方法似乎是在每个密钥上设置一个版本号,而不是在用户上传时删除密钥(因为可能有很多排列)你增加版本号,下次访问数据时会导致缓存未命中。
我不知道从哪里开始进行编码,而且我不太确定我是否完全理解它。
我的代码目前如下所示:-
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$key = md5("songsearch_$textSearch.$rangeSearch");
上面的键 var 中的两个变量是从 get 请求中检索出来的,而 get 请求又会检索大量的 JSON。 (想想产品目录)。
这些变量还决定了查询本身,该查询根据这些变量动态组合在一起。最终,所有这些都为我提供了一个对每个单独的查询都是唯一的键,即使从同一个脚本中我可以生成数百个键。
我希望以上内容很清楚,如果没有,请让我澄清任何要点,以便更好地帮助您回答我的问题。
显然稍后,我正在使用这个设置缓存结果:-
$memcache->set($key, $output, MEMCACHE_COMPRESSED, time() + 24*60*60*365);
就在我对 JSON 进行编码之前。
所以我的问题真的是......我如何添加某种形式的增量版本控制,以便如果用户上传文件,我可以使该脚本生成的所有密钥无效?
非常感谢任何让我至少走上正轨的人。
【问题讨论】:
-
糟糕的是,内存缓存不允许您删除通配符。只需刷新与某个常量键前缀匹配的所有缓存条目就很容易了;
cache_key_related_to_group_of_values* -
我完全同意... 会使其功能更强大/更易于使用。 :-(
标签: php memcached libmemcache