получить все ключи, установленные в memcached

Как я могу получить все ключи, установленные в моем экземпляре(экземплярах) memcached?

Я попытался погуглить, но не нашел много, кроме этого PHP поддерживает getAllKeys метод, что означает, что это действительно возможно сделать как-то. Как я могу получить то же самое в сеансе telnet?

Я опробовал все параметры, связанные с извлечением, упомянутые в memcached шпаргалка и memcached в команду telnet резюме, но никто из них не работал и я затрудняюсь найти правильный способ сделать это.

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

6 ответов


нашел способ, благодаря ссылка здесь (С оригиналом обсуждение группы google здесь)

во-первых,Telnet сервер:

telnet 127.0.0.1 11211

далее перечислите элементы, чтобы получить идентификаторы плиты:

stats items
STAT items:3:number 1
STAT items:3:age 498
STAT items:22:number 1
STAT items:22:age 498
END

первым номером после "элементов" является идентификатор плиты. Запросите дамп кэша для каждого идентификатора плиты с ограничением для максимального количества ключей для дампа:

stats cachedump 3 100
ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s]
END

stats cachedump 22 100
ITEM views.decorators.cache.cache_page..8427e [7736 b; 1256056128 s]
END


memdump

есть для этого (memcdump в Ubuntu, часть libmemcached-tools), например:

memdump --servers=localhost

, который вернет все ключи.


memcached-tool

в последней версии memcached появилась memcached-tool, например,

memcached-tool localhost:11211 dump | less

который сбрасывает все ключи и значения.


базы @mu 無 ответ здесь. Я написал сценарий дампа кэша.

скрипт сбрасывает все содержимое сервера memcached. Он протестирован с Ubuntu 12.04 и localhost memcached, поэтому ваш milage может отличаться.

#!/usr/bin/env bash

echo 'stats items'  \
| nc localhost 11211  \
| grep -oe ':[0-9]*:'  \
| grep -oe '[0-9]*'  \
| sort  \
| uniq  \
| xargs -L1 -I{} bash -c 'echo "stats cachedump {} 1000" | nc localhost 11211'

что он делает, он проходит через все плиты кэша и печатает 1000 записей каждого.

обратите внимание на определенные ограничения этого скрипта, т. е. он не может масштабироваться для сервера кэша 5GB, например. Но это полезно для отладка на локальном компьютере.


самый простой способ-использовать пакет python-memcached-stats,https://github.com/abstatic/python-memcached-stats

метод keys () должен заставить вас идти.

пример

from memcached_stats import MemcachedStats
mem = MemcachedStats()

mem.keys()
['key-1',
 'key-2',
 'key-3',
 ... ]

Если у вас установлен PHP & PHP-memcached, вы можете запустить

$ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'

Баш

чтобы получить список ключей в bash, выполните следующие действия.

во-первых, определите следующую функцию оболочки, чтобы сделать ее простой в использовании (копировать и вставлять в оболочку):

function memcmd() {
  exec {memcache}<>/dev/tcp/localhost/11211
  printf "%s\n%s\n" "$*" quit >&${memcache}
  cat <&${memcache}
}

Memcached 1.4.31 и выше

можно использовать lru_crawler metadump all команда для сброса (большинства) метаданных для (всех) элементов в кэше.

в противоположность cachedump, оно не причиняет строгие проблемы представления и не имеет никаких ограничений на количество ключей, которые могут быть сброшены.

пример команды с помощью ранее определенной функции:

memcmd lru_crawler metadump all

посмотреть: ReleaseNotes1431.


Memcached 1.4.30 и ниже

получить список плит с помощью статистика пользования, например:

memcmd stats items

для каждого класса slub вы можете получить список элементов, указав идентификатор slub вместе с предельным номером (0 - unlimited):

memcmd stats cachedump 1 0
memcmd stats cachedump 2 0
memcmd stats cachedump 3 0
memcmd stats cachedump 4 0
...

Примечание: вам нужно сделать это для каждого сервера memcached.

чтобы перечислить все ключи от всех заглушек, вот one-liner (на один сервер):

for id in $(memcmd stats items | grep -o ":[0-9]\+:" | tr -d : | sort -nu); do
    memcmd stats cachedump $id 0
done

Примечание: эта команда может вызвать серьезные проблемы с производительностью при доступе к детали, поэтому не рекомендуется работать на прямую.


Примечания:

stats cachedump только выводит HOT_LRU (IIRC?), который управляется фоновым потоком по мере выполнения действия. Это означает, что в новой версии, которая включена в 2Q algo, вы получите снимки того, что находится только в одном из LRU.

если вы хотите просмотреть все, lru_crawler metadump 1 (или lru_crawler metadump all)-это новый в основном официально поддерживаемый метод, который будет асинхронно сбрасывать столько ключей, сколько вы хотите. вы получите их из строя, но он поражает все LRU, и если вы не удаляете/заменяете элементы, несколько запусков должны дать то же самое результаты.

источник: GH-405.


по теме: