如何在memcached中删除具有相同前缀键的项目?

2022-08-30 15:17:01

例如,我有一些具有相同前缀的缓存项目,例如

'app_111111', 'app_222222', 'app_333333', ...

我可以通过任何 memcached 命令删除此类“app_xxxxxx”项目吗?


答案 1

Memcached不提供开箱即用的此功能,因此您必须自己构建它。

我解决这个问题的方法是在我的应用程序中为键组定义一个前缀(或命名空间)。我在 memcached 中设置的任何键前面都有该前缀。每当我想从Memcached“删除”东西时,我只需更改前缀即可。每当我想在Memcached中查找密钥时,我都会添加该前缀。

在您的情况下,您可以先将前缀设置为 ,例如 ,这样您的密钥将存储为 , 。MyAppPrefix1MyAppPrefix1::app_333333MyAppPrefix1::app_444444

稍后,当您要“删除”这些条目时,请将应用程序设置为使用 。然后,当您尝试从Memcached获取名为 的密钥时,它将查找并且第一次找不到它,就好像它已被删除一样。MyAppPrefix2app_333333MyAppPrefix2::app_333333


答案 2

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;
}

删除以$prefix开头的键,并返回已删除的所有键的列表。我刚刚在共享服务器上对30,000多个密钥运行了这个,它非常快 - 可能不到一秒钟。


推荐