#php #bash #shell #kyotocabinet
#php #bash #оболочка #kyotocabinet
Вопрос:
Привет, товарищи Stackoverflowians.
Я хочу извлечь информацию из ключа кэша из файла Kyoto Tycoon cabinet, в частности, из выходных данных утилиты Kyoto Cabinet kchashmgr (см.: http://fallabs.com/kyotocabinet/util.html#kchashmgr )
Я пытаюсь извлечь дату истечения срока действия из выходных данных kchashmgr get из двоичного / шестнадцатеричного вывода.
kchashmgr get /path/to/kyto/tycoon/casket.kch cache_key
Каков формат вывода приведенного выше, поэтому с помощью утилиты командной строки я могу это сделать:
expirationTimestamp=$(kchashmgr get /path/to/kyto/tycoon/casket.kch cache_key | something)
Изначально я думал, что смогу запустить его (для его установки требуется ZLIB), но это, очевидно, не сработало. Я также попытался использовать переключатель -px, чтобы посмотреть, помогло ли это.
ПРИМЕЧАНИЕ: я ищу решение оболочки, которое, предположительно, было бы быстрее, чем использование PHP-скрипта.
Спасибо, что уделили время этой теме.
Постскриптум
[yramirez@losthost ~ ]$ kcutilmgr conf -v # version of Kyoto Cabinet
1.2.76
Комментарии:
1. Kyoto — это просто хранилище ключей / значений. Значение, которое вы получаете обратно, когда даете ему ключ, является непрозрачным «значением» для этого ключа. Если это значение имеет какую-либо структуру или формат, оно определяется приложением, которое его создало, и никоим образом не изменяется Kyoto. Откуда взялись данные в БД?
2. @Joe данные были сохранены с использованием интерфейса Memcached с серверной частью Kyoto Tycoon и включенным флагом MEMCACHE_COMPRESSED. Кстати, у меня уже есть решение с использованием PHP-скрипта, который принимает аргумент командной строки в качестве ключа, но по понятным причинам он работает медленно. Я подумывал о написании собственного расширения Kyoto Cabinet, но это перебор.
3. Анализ результата этой команды означает знание того, как memcached форматирует / сжимает этот ввод.
4. Вывод частично сжат, но находится в какой-то структуре данных. Я собирался зайти в исходный код и посмотреть, как он передается на консоль, но я не писал на C уже 8 лет:-(