0

上周左右我一直在为 Memcache 工作,我已经设法弄清楚如何设置键/删除键。这很好,但我仍在尝试找出如何在一段时间的结果循环中做同样的事情。

例如,我将有一个帖子的 while 循环,该函数将在逻辑中检查是否设置了 Memcache,如果没有,它将收集结果并创建密钥。我的问题是,如果我将循环数据设置为 set 键并显示 set 键(最新的优先),那么插入新帖子时会发生什么?我知道我可以在 set 键上设置时间限制,但是只要设置限制似乎仍然可以显示旧帖子,就会/可以添加内容。所以我的问题是如何更新设置的密钥。

我能想到一个可能的解决方案的唯一方法是当用户插入一个新帖子时,这会删除密钥,当再次查看所有帖子时,这就是再次设置密钥的时候。但这似乎适得其反,就像有 10 位用户提交帖子一样,所有帖子都会一遍又一遍地设置(似乎并不真正有益)

我希望这是有道理的,任何帮助或指导将不胜感激。

4

1 回答 1

0

是的,如果您在有新帖子时删除密钥,则会发生您指定的场景。为了避免这种情况,您可以使用 a) memcache 的过期时间或 b) 维护自己的作业系统来控制缓存重建的阈值。

Memcache 的过期时间

PHP 有两个 Memecache PECL 插件,即MemcacheMemcached。Memcached(注意 d 后缀)支持一种称为touch的方法,它允许我们为现有项目设置新的过期时间。假设您将缓存设置为 2 小时,当出现新帖子时,我们可以使用touch. 因此,如果在接下来的 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使用 (atomic)getset.

职位系统

如果您有一个作业系统,那么每次出现新帖子时提交一个作业,该作业将由作业聚合器执行以控制缓存重建的频率。

使用 Memecached 似乎是最好的方法。

于 2013-02-10T13:02:03.077 回答