16.6.3.9 memcached의 TCP 텍스트 프로토콜 사용
memcached 서버와의 통신은 TCP 또는 UDP 프로토콜을 통해 실현됩니다. TCP 프로토콜을 사용하면 간단한 텍스트 기반의 인터페이스를 사용하여 정보를 교환 할 수 있습니다.
memcached와 통신 할 때 서버에 구성된 포트를 사용하여 서버에 연결할 수 있습니다. 서버와의 연결을 열 때 인증이나 로그인은 필요 없습니다. 연결 한 직후부터 서버에 명령 전송을 시작할 수 있습니다. 완료 한 때에는 특별한 절단 명령을 전송하지 않고 연결을 종료 할 수 있습니다. 클라이언트는 대기 시간을 단축하고 성능을 향상시키기 위해 연결을 열린 상태로 유지하는 것이 좋습니다됩니다.
데이터는 2 가지 형태로 memcached
서버로 전송됩니다.
서버에 명령을 전송하고 서버로부터 응답을 수신하는 데 사용되는 텍스트 행.
특정 키에 대한 값의 정보를주고받는 데 사용되는 비정형 데이터. 데이터를 수신했을 때와 동일한 형식으로 클라이언트에 반환됩니다.
텍스트 줄 (명령 및 응답) 및 구조화되지 않은 데이터는 모두 항상 문자열 \r\n
종료합니다. 저장된 데이터에이 시퀀스가 포함되어있을 수 있기 때문에 (비정형 데이터가 전송되기 전에 클라이언트에서 반환 된) 데이터의 길이를 사용하여 데이터의 끝이 특정되어야 입니다.
서버에 대한 명령은 작업에 따라 구조화되어 있습니다.
저장 명령 :
set
,add
,replace
,append
,prepend
,cas
서버에 대한 저장 명령은 다음의 형식을 취합니다.
command key [flags] [exptime] length [noreply]
또는 비교 앤드 스왑 (CAS)를 사용하는 경우 :
cas key [flags] [exptime] length [casunique] [noreply]
여기에서 :
command
: 명령 이름.set
: 키에 대한 값을 저장합니다add
: 키가 아직 존재하지 않는 경우에 그 키에이 값을 저장합니다replace
: 키가 이미 존재하는 경우에 그 키에이 키를 저장합니다append
: 지정된 키 값의 끝에 지정된 값을 추가합니다.flags
및exptime
인수는 사용하지 마십시오.prepend
: 지정된 키의 지정된 값의 끝에 캐시의 현재 값을 추가합니다.flags
및exptime
인수는 사용하지 마십시오.cas
: 지정된casunique
이 일치하는 경우에만 지정된 키를 지정된 값으로 설정합니다. 이것은 자신이 마지막으로 정보를 가져 오는 이후 어떤 사용자도 해당 정보를 업데이트하지 않은 경우, 그 정보를 변경하는 것과 실질적으로 동등합니다.
key
: 키. 모든 데이터는 특정 키를 사용하여 저장됩니다. 키에 제어 문자와 공백을 포함 할 수 없습니다. 키의 최대 크기는 250 자입니다.flags
: 작업 플래그 (정수). memcached 플래그는 투명합니다. memcached 서버는 플래그의 내용을 무시합니다. 이들은 클라이언트가 정보의 유형을 나타내는 데 사용합니다. memcached 1.2.0 이전 버전에서는이 값은 16 비트 정수 값입니다. memcached 1.2.1 이상에서이 값은 32 비트 정수입니다.exptime
: 만료 시간 (만료가없는 경우 0).length
: 지정된 값 블록의 길이 (바이트 단위 종단의\r\n
문자 제외).casunique
: 기존 항목의 고유의 64 비트 값. 이것은 기존의 값과 비교하는 데 사용됩니다.cas
업데이트를 게시 할 때gets
명령에서 반환 된 값을 사용합니다.noreply
: 명령에 응답하지 않도록 서버에 지시합니다.
예를 들어, 값
abcdef
키xyzkey
에 저장하려면 다음을 사용합니다.set xyzkey 0 0 6\r\nabcdef\r\n
서버에서 반환 값은 상태 또는 오류 정보를 나타내는 한 줄입니다. 자세한 내용은 표 16.3 "memcached 프로토콜의 응답" 을 참조하십시오.
검색 명령 :
get
,gets
검색 명령은 다음의 형식을 취합니다.
get key1 [key2 .... keyn] gets key1 [key2 ... keyn]
요구하는 각 키를 공백으로 구분하여 여러 개의 키를 명령에 지정할 수 있습니다.
서버는 다음과 같은 형식의 정보 행에 응답합니다.
VALUE key flags bytes [casunique]
여기에서 :
key
: 키 이름.flags
: 값을 저장하면 memcached 서버에 제공된 플래그 정수 값.bytes
: 저장되어있는 값의 크기 (종단의\r\n
문자 시퀀스 제외).casunique
: 항목을 식별하는 고유의 64 비트 정수입니다.
정보 행의 직후에 값 데이터 블록이 계속됩니다. 예 :
get xyzkey\r\n VALUE xyzkey 0 6\r\n abcdef\r\n
여러 키를 요구하는 경우는 발견 된 키에 대해 정보 행과 데이터 블록을 반환합니다. 요청 된 키가 캐시에 존재하지 않는 경우 정보는 반환되지 않습니다.
삭제 명령 :
delete
삭제 명령은 다음의 형식을 취합니다.
delete key [time] [noreply]
여기에서 :
key
: 키 이름.time
: 클라이언트가 서버에이 키add
또는replace
명령을 거부하라는 초 단위의 시간 (또는 특정 Unix 시간). 이 기간 동안 모든add
,replace
,get
및gets
명령이 실패합니다.set
작업이 성공합니다. 이 기간이 지나면 그 키는 영구적으로 삭제되고 모든 명령이 허용됩니다.지정하지 않으면이 값은 0 (즉시 삭제)로 간주됩니다.
noreply
: 명령에 응답하지 않도록 서버에 지시합니다.
이 명령에 대한 응답은 키가 성공적으로 제거 된 것을 나타내는
DELETED
하거나 지정된 키를 찾지 못했음을 나타내는NOT_FOUND
중 하나입니다.증가 / 감소 :
incr
,decr
증가 및 감소 명령은 개별 취득 / 설정 순서를 실행하지 않고 서버의 키 값을 변경합니다. 이러한 작업은 현재 저장되어있는 값이 64 비트 정수임을 전제로하고 있습니다. 저장되어있는 값이 64 비트 정수가 아닌 경우는 증가 또는 감소 작업을 적용하기 전에 그 값이 0으로 간주됩니다.
증가 및 감소 명령은 다음의 형식을 취합니다.
incr key value [noreply] decr key value [noreply]
여기에서 :
key
: 키 이름.value
: 증가 및 감소로 사용되는 정수입니다.noreply
: 명령에 응답하지 않도록 서버에 지시합니다.
응답은 다음과 같습니다.
NOT_FOUND
: 지정된 키를 찾을 수 없습니다.value
: 지정된 키에 관련 지을 수 있었던 새로운 값.
값은 부호없는 것으로 간주됩니다.
decr
작업은 값이 0 미만으로 감 분하는 것은 아닙니다.incr
작업은 64 비트의 최대 값으로 값이 되풀이합니다.통계 명령 :
stats
stats
명령은 memcached 인스턴스의 현재 상태와 거기에 저장되어있는 데이터에 대한 자세한 통계 정보를 제공합니다.통계 명령은 다음의 형식을 취합니다.
STAT [name] [value]
여기에서 :
name
: 반환되는 통계의 이름 (옵션). 지정하지 않은 경우, 일반 통계가 반환됩니다.value
: 특정 통계 작업을 수행 할 때 사용되는 특정 값.
반환 값은 다음과 같이 포맷 된 통계 데이터의 목록입니다.
STAT name value
통계는
END
라는 한 줄로 종료합니다.자세한 내용은 섹션 16.6.4 "memcached 통계 가져 오기" 를 참조하십시오.
참조를 위해 지원되는 각종 명령과 형식의 목록을 보여줍니다.
표 16.2 memcached 명령 참조
명령 | 명령 형식 |
---|---|
set | set key flags exptime length , set key flags exptime length noreply |
add | add key flags exptime length , add key flags exptime length noreply |
replace | replace key flags exptime length , replace key flags exptime length noreply |
append | append key length , append key length noreply |
prepend | prepend key length , prepend key length noreply |
cas | cas key flags exptime length casunique , cas key flags exptime length casunique noreply |
get | get key1 [key2 ... keyn] |
gets |
|
delete | delete key , delete key noreply , delete key expiry , delete key expiry noreply |
incr | incr key , incr key noreply , incr key value , incr key value noreply |
decr | decr key , decr key noreply , decr key value , decr key value noreply |
stat | stat , stat name , stat name value |
서버에 명령을 전송하면 서버에서 응답은 다음 표에 나와있는 설정 중 하나입니다. 서버의 응답 값은 모두 \r\n
종료합니다.
표 16.3 memcached 프로토콜 응답
문자열 | 설명 |
---|---|
STORED | 값이 성공적으로 저장되었습니다. |
NOT_STORED | 값이 저장되지 않았지만 오류가 발생하지 않습니다. 값을 추가하거나 (있는 경우) 업데이트하는 명령 ( add 와 replace ) 또는 항목이 이미 삭제하도록 설정되어있는 경우 명령에 대응합니다. |
EXISTS | cas 명령을 사용하면 저장하려고하는 항목이 이미 존재하고 마지막 검사 이후에 변경되어 있습니다. |
NOT_FOUND | 저장, 갱신 또는 삭제하려고하는 항목이 없거나 이미 삭제되어 있습니다. |
ERROR | 존재하지 않는 명령어를 전송했습니다. |
CLIENT_ERROR errorstring | 입력 행에 오류가있었습니다. 자세한 내용은 errorstring 에 포함되어 있습니다. |
SERVER_ERROR errorstring | 서버에 오류가 있었기 때문에 정보를 반환 할 수 없습니다. 극단적 인 경우에는이 오류가 발생하면 서버가 클라이언트로부터 연결 될 수 있습니다. |
VALUE keys flags length | 요청 된 키를 찾을 저장되어있는 key , flags 및 데이터 블록이 지정된 length 로 반환됩니다. |
DELETED | 요청 된 키가 서버에서 삭제되었습니다. |
STAT name value | 통계 데이터의 행. |
END | 통계 데이터 끝. |