memcached에 모든 키를 설정하십시오.


131

memcached 인스턴스에 설정된 모든 키를 어떻게 얻을 수 있습니까?

인터넷 검색을 시도했지만 methodPHP 지원하는 것을 제외하고 는 많이 찾지 못했습니다. 실제로 어떻게 든 할 수 있습니다. 텔넷 세션 내에서 어떻게합니까?getAllKeys

memcached cheat sheetMemcached telnet 명령 요약에 언급 된 모든 검색 관련 옵션을 시도했지만 그중 아무것도 작동하지 않으며 올바른 방법을 찾지 못했습니다.

참고 : 현재 개발 중에이 작업을 수행하고 있으므로 새 키가 설정되거나 다른 경쟁 조건이 발생하여 문제가 없으며 키 수도 제한된다고 가정 할 수 있습니다.


게시물을 확인하십시오 . 나는 같은 문제가 있었고 해결책을 찾았습니다.
피터 VARGA

github.com/clickalicious/phpmemadmin 이 유용 보입니다 (Laravel Homestead Vagrant와 작동하도록하는 방법을 알 수 있다면 현재 키가 표시되지 않습니다).
Ryan

답변:


178

여기링크 덕분에 방법을 찾았습니다 (원래 Google 그룹 토론이 여기에 있음 )

먼저 Telnet서버로 :

telnet 127.0.0.1 11211

다음으로 슬래브 ID를 가져올 항목을 나열하십시오.

통계 아이템
STAT 아이템 : 3 : 숫자 1
STAT 아이템 : 3 : 나이 498
STAT 아이템 : 22 : 숫자 1
STAT 아이템 : 22 : 연령 498
종료

'항목'다음의 첫 번째 숫자는 슬래브 ID입니다. 덤프 할 최대 키 수를 제한하여 각 슬랩 ID에 대한 캐시 덤프를 요청하십시오.

통계 캐시 덤프 3100
ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s]
종료

통계 캐시 덤프 22100
ITEM views.decorators.cache.cache_page..8427e [7736 b; 1256056128 s]
종료


4
stats cachedump는 문서화되지 않은 기능이며 memcached 팀에서 지원하지 않습니다. 디버깅 전용이며 프로덕션 용이 아닙니다.
mikewied

오 그래. 내 질문에서 말했듯이, 나는 현재 개발 모드에 있고 디버깅을 위해 필요했습니다.
mu 無

3
b, 바이트 s시대 시간 초
아브라함 승가

1
@Dan 어쩌면 활동중인 답변으로 먼저보고있을 수도 있습니다.이 답변은 마지막 활동 시점을 기준으로 답변 게시물을 정렬합니다. 그렇다면 질문 텍스트 바로 아래에서 활성 / 가장 오래된 / 투표 중 하나를 선택하여이를 변경할 수 있습니다. 그외에이 답변은 시크릿 모드에서 최상위에 있습니다.
mu 無

2
lru_crawler metadump all첫 캐시를 "단지"하지 않고 모든 캐시 키를 덤프 할 수도 있습니다 . github.com/memcached/memcached/blob/…
Kaos

65

memdump

그 (부분)에 대한 memcdump(때로는 memdump) 명령이 있습니다 libmemcached-tools.

memcdump --servers=localhost

모든 키를 반환합니다.


memcached-tool

최신 버전에는 memcached다음 memcached-tool과 같은 명령 도 있습니다.

memcached-tool localhost:11211 dump | less

모든 키와 값을 덤프합니다.

또한보십시오:


4
'memdump'에주의를 기울이면이 명령은 터미널을 중단시키는 좋은 방법입니다.
deweydb

5
꼼꼼한! dump에 대한 하위 명령은 memcached-tool캐시를 지울 것 같다 :( 사용에 안전 할 --might display또는 stats첫째.
MarkHu

4
Ubuntu Xenial에서는 memdump를 포함하는 패키지를이라고 libmemcached-tools하고 도구의 이진 파일을 memcdump라고합니다.
thenickdude

5
찾고있는 사람들에게는 memcached-tool디렉토리에 다소 숨겨져 있습니다 PATH. 적어도 우분투 제니 얼 에는 표준이 아닐 수도 있습니다./usr/share/memcached/scripts/
sxc731

17

에 대한 자료 @mu는無 여기에 대답합니다. 캐시 덤프 스크립트를 작성했습니다.

스크립트는 memcached 서버의 모든 내용을 덤프합니다. Ubuntu 12.04 및 로컬 호스트 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 개의 항목을 인쇄합니다.

이 스크립트의 특정 한계를 알고 있어야합니다. 예를 들어 5GB 캐시 서버에 맞게 확장되지 않을 수 있습니다. 그러나 로컬 컴퓨터에서 디버깅 목적으로 유용합니다.


3
데비안 8에서는 memcached 1.4.21-1.1+deb8u1memcached에 quit 명령을 명시 적으로 보내야했습니다. 나는 이것에 대한 당신의 명령을 수정했고 지금 제대로 작동합니다 : 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'이것을 공유해 주셔서 감사합니다! 디버깅에 매우 유용 :)
Cha0s

어떤 이유로 든 grep -oe '[0-9] *'가 Mac의 iTerm2에서 작동하지 않으며 grep -Eo '[0-9] {1,99}'로 대체해야했습니다.
max4ever

이것은 근사하지만, 열쇠가 빠져 있습니다.
사용자

14

PHP & PHP-memcached가 설치되어 있다면

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

1
addServer 후에이 작업을 수행해야합니다. $c->setOption(Memcached::OPT_BINARY_PROTOCOL, false); 최신 버전의 Memcached
hack4mer

아직도 대답은 bool (false)입니다
.--

2
@WolfgangBlessen-memcached의 버그로 인해 최신 버전으로 수정되었습니다. github.com/php-memcached-dev/php-memcached/issues/203
billynoah

@billynoah 들으, 난 정말 지금 결과를보고 memcached를 :-) 유용한지기 시작한다
볼프강 Blessen

12

세게 때리다

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 이하

items statistics 명령 을 사용하여 슬래브 목록을 가져옵니다 . 예 :

memcmd stats items

각 슬러브 클래스에 대해 제한 번호와 함께 슬러브 ID를 지정하여 항목 목록을 얻을 수 있습니다 ( 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 Algo를 사용할 수있는 충분한 새 버전에서 LRU 중 하나에 대한 스냅 샷보기를 제공함을 의미합니다.

모든 것을 보려면 lru_crawler metadump 1(또는 lru_crawler metadump all)은 대부분의 공식적으로 지원되는 새로운 방법으로 원하는만큼 많은 키를 비동기 적으로 덤프합니다. 순서가 맞지 않지만 모든 LRU에 영향을 미치며 항목을 삭제 / 교체하지 않는 한 여러 번 실행하면 동일한 결과가 나타납니다.

출처 : GH-405 .


관련 :


5

가장 쉬운 방법은 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',
 ... ]

1
다음과 같이 명령 줄에서 수행 할 수도 있습니다python -m memcached_stats <ip> <port>
Martijn

1
현재는 Python2 전용입니다.
Marius

반환되는 키 수 또는 크기에 제한이 있습니까?
loknath
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.