Просмотр содержимого memcached

36

Существуют ли инструменты для изучения того, что в данный момент кэшируется в пуле memcached? Не очень много графиков, но фактические ключи / значения в настоящее время хранятся.

Том
источник

Ответы:

9

Попробуй stats items- т.е.

echo "stats items" | nc 127.0.0.1 11211
danlefree
источник
16
Как это отвечает на вопрос ?! Это только выдает статистику сервера, но не возвращает ключи.
Джагтеш Чадха
24

Правильный ответ будет echo "stats cachedump SLABS_ID LIMIT" | nc HOSTNAME PORT

например. echo "stats cachedump 15 4" | nc 127.0.0.1 11211

Это дало бы вывод в строках:

ITEM cache_path-comments%2Fpage%2F2 [2211 b; 1337195558 s]
ITEM cache_path-comments%2Fpage%2F5 [2205 b; 1337195558 s]
ITEM cache_path-comments%2Fpage%2F6 [2179 b; 1337195558 s]
ITEM cache_path-comments [2164 b; 1337195558 s]
END

Примечание. Это недокументированная команда, которая не поддерживается командой memcached и может быть удалена в любой версии. Для полной справки, проверьте Понимание команды Memcached stats cachedump .

Джагтеш Чадха
источник
cachedump ограничиваются недокументированным количеством данных, не Грейтидом чем 1-2mb так это не надежное
Джон
11

Memcached-инструмент

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

memcached-tool localhost:11211 dump | less

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

memdump

Чтобы вывести список ключей с сервера, используйте memcdump/ memdumptool, например

memcdump --servers=localhost 

Чтобы сбросить все объекты:

memcdump --servers=localhost | xargs -L1 -I% sh -c 'echo "get %" | nc localhost 11211'

Чтобы выгрузить все значения ключей в отдельные файлы:

while read -r key; do [ -f "$key" ] || echo "get $key" | nc localhost 11211 > "$key.dump"; done < <(memcdump --server localhost)

memccat

Чтобы напечатать значение ключа, вы можете использовать memccatкоманду, например

memccat CACHE-KEY

удар

Чтобы сбросить все ключи в оболочке Bash, попробуйте:

exec {memcache}<>/dev/tcp/localhost/11211; printf "stats items\nquit\n" >&${memcache}; cat <&${memcache}

Netcat

Вот пример, чтобы получить значение одного элемента, используя netcat:

echo "get 13456_-cache-some_object" | nc 127.0.0.1 11211

питон

Смотрите: Как экспортировать все ключи и значения из memcached с Python?

kenorb
источник
2
Этот ответ помог мне найти настоящий инструмент memcached: memcdump . Смотрите этот ответ: stackoverflow.com/a/14491419/720360
mmuller
1
Сначала я должен был apt install libmemcached-tools, но тогда это все еще не было на моем пути, так что /usr/share/memcached/scripts/memcached-tool localhost:11211 dump. Ubuntu 18.
Камиль Гудесюн
7

Попробуйте использовать telnetкоманду, например:

$ telnet 0 11211
stats
stats items
set key 1 23 8
get key
silviud
источник
6

Установите libmemcached-toolsи затем вы можете использовать эту команду, чтобы получить все ключи:

memcdump --server=127.0.0.1

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

memccat --server=127.0.0.1 SOME_KEY

или вы можете перебрать список ключей в Bash:

for key in $(memcdump --server=127.0.0.1); do echo ------ $key ------; memccat --server=127.0.0.1 $key; done

Убедитесь, что вы используете 127.0.0.1 (если вы запускаете команду на том же хосте), потому localhostчто, похоже, не работает.

Тобия
источник
2

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

Некоторые поставщики, которые разработали совместимые с memcached решения, например Gear6 , однако добавили функциональность, позволяющую выполнять запросы.

Крис
источник