17

有没有办法根据通配符键使内存缓存中的条目无效?

因此,如果我有以下内存缓存键:

data/1
data/2
data/3

有没有一种方法可以使这些密钥无效data/*?一口气清除一堆陈旧的数据将非常有帮助。

4

2 回答 2

23

最好的方法是在创建 memcache 密钥时提供版本控制密钥。我们通过提供在我们的系统上创建密钥的单一功能/方法来做到这一点。

$var1 = 123;
$var2 = 456;
$cacheKey = makeKey('monkeyInfo', $var1, $var2, ...);

makeKey()使用 cacheKeyVersions 数组中的信息并返回:

5:monkeyInfo:123:456

注意开头的“5”。这来自 keyNames => 版本的硬编码数组。因此,如果我们想使系统中的每个“monkeyInfo”缓存值无效,我们只需将该数字更改为数组中的 6。从那时起,同一个电话将寻找

6:monkeyInfo:123:456

以下是密钥版本数组的外观示例。' makeKey()' 调用只是查看此数组以获取任何给定键的版本号。

$cacheKeyVersions = array(
    'monkeyInfo'   => 5,
    'zebraInfo'    => 2
);

你可以做各种各样的事情来使实现符合你的需要,但这是它的基本要点。

于 2009-08-01T18:39:54.407 回答
5

memcached 不支持命名空间删除。

官方 wiki有一个关于如何解决它的建议:

于 2009-07-30T00:33:55.310 回答