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


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

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

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

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

6 99

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.


по теме: