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

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

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

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

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

Ответ 1

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

Сначала Telnet на ваш сервер:

telnet 127.0.0.1 11211

Затем перечислите элементы для получения идентификаторов slab:

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

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

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

Ответ 2

memdump

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

memdump --servers=localhost

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


memcached-tool

В последней версии memcached есть также команда memcached-tool, например

memcached-tool localhost:11211 dump | less

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

Смотрите также:

Ответ 3

База на @mu 無 ответьте здесь. Я написал дамп кэша script.

script сбрасывает все содержимое сервера memcached. Он протестирован с Ubuntu 12.04 и localhost 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 записей каждого из них.

Обратите внимание на определенные ограничения этого script, т.е. он может не масштабироваться для сервера кэша размером 5 ГБ, например. Но это полезно для целей отладки на локальной машине.

Ответ 4

Самый простой способ - использовать пакет 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',
 ... ]

Ответ 5

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

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

Ответ 6

удар

Чтобы получить список ключей в 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, вы получите представление моментальных снимков того, что только в одном из LRU.

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

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


Связанные с: