有没有办法根据通配符键使memcache中的条目无效?
所以,如果我有以下内存缓存密钥:
data/1
data/2
data/3
有没有办法可以使data/*
这样的密钥无效?一举清除一堆陈旧数据将是非常有帮助的。
答案 0 :(得分: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
);
你可以做各种各样的事情来使实现符合你的需要,但这是它的基本要点。
答案 1 :(得分:5)
memcached不支持命名空间删除。
official wiki建议如何解决这个问题: