2009-07-29 7 views
17

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

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

data/1 
data/2 
data/3 

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

ответ

23

Самый лучший способ, чтобы дать ключ управления версиями при создании кэша памяти ключа. Мы делаем это, предоставляя единую функцию/метод для создания ключа в нашей системе.

$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 
); 

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

+0

Также обратите внимание, что ваша функция/метод makeKey также может включать глобальную версию, которая позволит вам очистить весь кеш при необходимости. Или вы можете использовать его для очистки определенных доменов ключей и т. Д. Это зависит от вас. – conceptDawg

+0

Очень умный способ выполнить задачу. Спасибо за понимание. – Kekoa

+0

@ConceptDawg у вас есть или знаете какие-либо библиотеки (желательно PHP), которые будут реализовывать этот алгоритм? – romaninsh

5

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

official wiki есть предложение о том, как работать вокруг него:

 Смежные вопросы

  • Нет связанных вопросов^_^