Хобрук: Ваш путь к мастерству в программировании

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

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

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

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

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

24.10.2013

  • Проверьте мою публикацию. У меня была такая же проблема, и я нашел решение. 03.04.2016
  • github.com/clickalicious/phpmemadmin выглядит полезным (если я смогу понять, как заставить его работать с Laravel Homestead Vagrant; в настоящее время он не показывает ключей). 06.07.2017

Ответы:


1

Нашел способ, благодаря ссылке здесь (с оригинальным обсуждение группы 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

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

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

24.10.2013
  • Обратите внимание, что cachedump статистики - это недокументированная функция, которая не поддерживается командой memcached. Он предназначен только для отладки и не предназначен для производственного использования. 25.10.2013
  • Ох, хорошо. Как я уже сказал в своем вопросе, в настоящее время я нахожусь только в режиме разработки, и мне это нужно для отладки. 25.10.2013
  • b - байты, s - секунды эпохи 20.12.2016
  • b = байты, s = время в секундах, какой ключ? 12.03.2018
  • Какие дурацкие вещи с релевантностью происходят в Stack Overflow, что this является нижним ответом? У него больше всего голосов, это объективно лучший ответ и принятый ответ ... 29.03.2018
  • @Dan Может быть, вы сначала просматриваете по активным ответам, которые сортируют сообщения с ответами в зависимости от того, когда они в последний раз были активны. Если да, вы можете изменить это, выбрав один из активных / самых старых / голосов чуть ниже текста вопроса. Кроме того, этот ответ находится вверху в режиме инкогнито. 29.03.2018
  • Ага, это тот самый! Спасибо @mu 無. Это по умолчанию? 31.03.2018
  • это не очень помогло, если бы у меня было 40 плит 09.08.2018
  • @NikhilTalreja Не стесняйтесь публиковать лучший ответ на благо сообщества, в то время он работал для моего варианта использования. 09.08.2018
  • Существует также lru_crawler metadump all, который сбрасывает все ключи кеша, а не только первые 1M .. github.com/memcached/memcached/blob/ 06.11.2018
  • Я возвращаюсь к этому ответу каждый месяц. Для меня было очень важно выполнить свою работу в этом сезоне. Большое спасибо @mu 無 07.01.2021

  • 2

    memdump

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

    memcdump --servers=localhost
    

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


    memcached-tool

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

    memcached-tool localhost:11211 dump | less
    

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

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

    09.03.2016
  • осторожно с 'memdump', эта команда - отличный способ вывести из строя ваш терминал. 23.09.2016
  • Осторожный! Подкоманда dump для memcached-tool, кажется, очищает кеш :( - может быть безопаснее сначала использовать display или stats. 20.01.2017
  • В Ubuntu Xenial пакет, содержащий memdump, называется libmemcached-tools, а вместо него двоичный файл инструмента называется memcdump. 09.04.2017
  • Для тех, кто ищет memcached-tool, он несколько спрятан в каталоге, который может быть не в стандартном PATH - по крайней мере, в Ubuntu Xenial - здесь: /usr/share/memcached/scripts/ 06.01.2018

  • 3

    Основываясь на ответе @mu 無 здесь. Я написал сценарий дампа кеша.

    Скрипт выгружает все содержимое сервера memcached. Он протестирован с Ubuntu 12.04 и memcached localhost, поэтому ваш пробег может отличаться.

    #!/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 ГБ. Но это полезно для отладки на локальном компьютере.

    10.08.2016
  • В Debian 8 с memcached 1.4.21-1.1+deb8u1 мне приходилось явно отправлять команду выхода в memcached. Я изменил вашу команду на это и теперь работает правильно: echo -e "stats items\nquit" | nc localhost 11211 | grep -oe ':[0-9]*:' | grep -oe '[0-9]*' | sort | uniq | xargs -L1 -I{} bash -c 'echo -e "stats cachedump {} 1000\nquit" | nc localhost 11211' Спасибо, что поделились этим! Очень полезно для отладки :) 13.01.2017
  • по какой-то причине grep -oe '[0-9] *' не работает в iTerm2 на Mac, пришлось заменить на grep -Eo '[0-9] {1,99}' 04.02.2019
  • Это здорово, но в нем отсутствуют некоторые ключи, есть идеи, почему? 29.05.2020

  • 4

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

    $ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
    
    11.09.2017
  • Это нужно сделать после addServer: $c->setOption(Memcached::OPT_BINARY_PROTOCOL, false); Для более новых версий Memcached 24.02.2018
  • Тем не менее, ответ - bool (false) :-( 23.04.2018
  • @WolfgangBlessen - это из-за ошибки в memcached - она ​​исправлена ​​в последних версиях. github.com/php-memcached-dev/php-memcached/issues/ 203 27.11.2018
  • @billynoah Спасибо, теперь я действительно вижу результаты, и memcached начинает приносить пользу :-) 28.11.2018

  • 5

    Баш

    Чтобы получить список ключей в 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.


    Связанный:

    06.08.2018

    6

    Самый простой способ - использовать пакет 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',
     ... ]
    
    07.02.2017
  • Вы даже можете сделать это из командной строки с помощью python -m memcached_stats <ip> <port> 05.07.2017
  • На данный момент только Python2. 11.02.2019
  • Будет ли какое-то ограничение на количество или размер возвращаемых ключей? 17.12.2019
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..