получить все ключи, установленные в 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.
по теме:
- Список всех объектов в memcached
- написание клиента Redis в pure bash (это Redis, но очень похожий подход)
- проверьте другие доступные команды в https://memcached.org/wiki
- Проверьте
protocol.txt
файл Docs.