Memcache делает недействительными записи в соответствии с шаблоном? - PullRequest
17 голосов
/ 29 июля 2009

Есть ли способ аннулировать записи в memcache в соответствии с подстановочным ключом?

Так что, если у меня есть следующие ключи memcache:

data/1
data/2
data/3

Есть ли способ, которым я могу сделать эти ключи недействительными, например, data/*? Было бы чрезвычайно полезно очистить кучу устаревших данных одним махом.

Ответы [ 2 ]

23 голосов
/ 01 августа 2009

Лучший способ - предоставить ключ управления версиями при создании ключа 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
);

Вы могли бы делать все что угодно, чтобы реализация соответствовала вашим потребностям, но в этом ее основная суть.

5 голосов
/ 30 июля 2009

memcached не поддерживает удаления из пространства имен.

Официальная вики содержит предложение о том, как ее обойти:

...