nor*_*ree 26 php memcached prefix
例如,我有一些具有相同前缀的缓存项,例如
'app_111111', 'app_222222', 'app_333333', ...
Run Code Online (Sandbox Code Playgroud)
我可以通过任何memcached命令删除这样的'app_xxxxxx'项吗?
zia*_*aab 39
Memcached不提供开箱即用的功能,因此您必须自己构建它.
我解决这个问题的方法是在我的应用程序中为键组定义一个前缀(或命名空间).我在memcached中设置的任何键都有前缀.每当我想从Memcached"删除"东西时,我只需更改前缀.每当我想在Memcached中查找密钥时,我都会添加该前缀.
在您的情况下,您可以首先将前缀设置为,例如MyAppPrefix1,因此您的密钥将存储为MyAppPrefix1::app_333333,MyAppPrefix1::app_444444.
稍后当您要"删除"这些条目时,请将您的应用程序设置为使用MyAppPrefix2.然后,当你试图从被调用的Memcached中获取一个密钥时app_333333,它会查找MyAppPrefix2::app_333333并且第一次找不到它,就好像它已被删除一样.
php中的这个函数怎么样:
function deletekeysbyindex($prefix) {
$m = new Memcached();
$m->addServer('localhost', 11211);
$keys = $m->getAllKeys();
foreach ($keys as $index => $key) {
if (strpos($key,$prefix) !== 0) {
unset($keys[$index]);
} else {
$m->delete($key);
}
}
return $keys;
}
Run Code Online (Sandbox Code Playgroud)
删除以$ prefix开头的键,并返回所有已删除键的列表。我现在在共享服务器上运行了30,000+个密钥,运行起来非常快-可能不到一秒钟。