получить все ключи, установленные в memcached
Как я могу получить все ключи, заданные в моем memcached экземпляра(ов)?
Я пробовал гуглить, но не нашел ничего, кроме этого PHP
поддерживает a 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 и локальным хостом memcached, поэтому ваш пробег может отличаться.
#!/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 записей каждого.
пожалуйста, имейте в виду определенные ограничения этого скрипта, т. е. он не может масштабироваться для сервера кэша 5 ГБ, например. Но это полезно для отладки на локальном компьютере.
самый простой способ-использовать пакет 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
- неограниченный):memcmd stats cachedump 1 0 memcmd stats cachedump 2 0 memcmd stats cachedump 3 0 memcmd stats cachedump 4 0 ...
Примечание: вам нужно сделать это для каждого сервера memcached.
чтобы перечислить все ключи из всех заглушек, вот один лайнер (на один сервер):
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.
по теме:
- Список всех объектов в memcached
- написание клиента Redis в чистом виде bash (это редис, но очень похожий подход)
- проверьте другие доступные команды на https://memcached.org/wiki
- Проверьте
protocol.txt
файл Docs.