我上周一直在为Memcache工作,我已经设法解决了如何设置键/删除键。这很好,但我仍然试图找出如何为一段时间的结果做同样的事情。
例如,我将有一个post循环的帖子,从逻辑内部函数将检查是否设置了Memcache,如果不是,它将收集结果并创建密钥。我的问题是,如果我已将循环数据设置为设置密钥并显示设置密钥(最新优先)那么当插入新帖子时会发生什么?我知道我可以设置时间限制在设置键上,但是当内容将/可以添加时,似乎设置限制仍然可以显示旧帖子。所以我的问题是如何更新设置密钥。
我能想到一个可能的解决方案的唯一方法是当用户插入新帖子时,这会删除该键,当再次查看所有帖子时,这就是重新设置键的时间。但这似乎相当反效果,就像有10个用户提交帖子一样,所有帖子都会反复设置(看起来并没有什么好处)
我希望这是有道理的,任何帮助或指导都会受到赞赏。
答案 0 :(得分:0)
是的,如果您在新帖子中删除密钥,则会指定您指定的方案。为了逃避这种情况,您可以使用a)memcache的到期或b)维护自己的作业系统来控制缓存重建的阈值。
Memcache的到期
PHP有两个Memecache PECL插件,即Memcache和Memcached。 Memcached(注意d后缀)支持一种名为touch的方法,它允许我们为现有项设置新的到期时间。假设您将缓存设置为2小时,当出现新帖子时,我们可以使用touch
将到期时间设置为10分钟。因此,如果在接下来的10分钟内有新帖子,缓存将只重建一次。这种技术被称为技术术语中的去抖动。
一些代码:
$_memcached = new Memcached;
if(!$_memcached->addServer('localhost',11211))
{
$_isConnected = FALSE;
}
else
{
$_isConnected = TRUE;
}
$_memcached->touch($key, $expiry);
$_memcaced->add($key, $value, $expiry);
请注意:这只是举例,请创建一个单例类并使用它。
如果必须使用旧的Memcache插件,则只能使用(原子)touch
和get
的组合复制set
的行为。
工作系统
如果您有一个作业系统,那么每次出现一个新帖子时都会提交一个作业,该帖子将由作业聚合器执行,以控制缓存重建的频率。
使用Memecached似乎是最好的方法。