최근에 Memcached 관련 3rd party application에 대해 개인적으로 아아아아...주 잠깐 분석을 했던지라 관련 내용으로 포스팅합니다.

What is Memcached?

Memcached는 범용 분산 메모리 캐싱 시스템입니다. 일반적으로 DB의 부하를 줄이고 동적 웹 어플리케이션의 속도 향상을 위해 사용되죠.
오픈소스 소프트웨어이며 Data나 Object를 RAM에 캐싱하는 방식으로 많이 사용됩니다.

이해를 돕기위해 일단적으로 DB만 사용하는 것과 memcached를 사용한 것 모두 샘플 코드를 보겠습니다. (https://en.wikipedia.org/wiki/Memcached 내 code)

Only DB

function get_foo(int userid)
 {
    data = db_select("SELECT * FROM users WHERE userid = ?", userid); // 단순하게 DB에서 데이터를 조회해서
    return data; // 반환합니다.
 }

With Memcached

 function get_foo(int userid)
 {
    data = memcached_fetch("userrow:" + userid); // userid 가 메모리 캐시에 있는지 확인 후
    if (!data) {
       data = db_select("SELECT * FROM users WHERE userid = ?", userid); // db로 부터 얻어온 값을 ..
       memcached_add("userrow:" + userid, data);  // memcached로 넣어줍니다.
    }
    return data; // 그 이후부터는 memcached를 이용하여 데이터를 사용하겠죠.
 }

간단합니다.

Connecting to memcached server using telnet

일단 telnet이나 nc로도 쉽게 memcached 서버로 접근하여 값을 읽어오거나 수정, 추가할 수 있습니다.
먼저 telnet을 통해 서버로 연결합니다. (기본 포트는 11211 입니다)

#> telnet 127.0.0.1 11211

텔넷 세션이 열려있는 상태에서 명령어를 주게 되면 여러가지 동작을 할 수 있습니다.
먼저 정상 연결 확인을 위해 stats 명령을 이용해 status 를 보겠습니다.

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats     
STAT pid 7822
STAT uptime 11213
STAT time 1487915288
STAT version 1.4.25 Ubuntu
STAT libevent 2.0.21-stable
STAT pointer_size 64

잘 되네욥.


Show Key list

먼저 현재 저장된 키 리스트를 보는 명령입니다. Basic 명령은 Add del  부터 시작하겠지만, 그냥 이걸 먼저 알아두면 편할거 같기에 맨 위로 올렸습니다. 

stats 명령은 여러가지 상태값을 볼 수 있습니다. telnet 으로 접근했을 때 바로 사용했던거죠. 여기서 하나의 하위 옵션으로 stat을 볼 수 있는데, 이 중 items를 통해 현재 저장된 메모리캐시 값을 볼 수 있습니다. 

stats items
STAT items:1:number 1
STAT items:1:age 2365
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 3

stats 명령을 활용하면 쉽게 키 리스트를 알아낼 수 있습니다.

Add to key/value

memcache에 key와 값을 추가하는 명령입니다. 
아래 순서대로 들어가며, key는 key의 이름, flags(int, char등) , exptime 유효시간,
bytes는 크게를 의미하고 각각 value 는 %0d%0a(\r\n) 이후에 값, 그리고 뒤에 다시 똑같이 개행문자를 붙여줘야 인식됩니다. 

add <key> <flags> <exptime> <bytes> \r\n<value>\r\n
set <key> <flags> <exptime> <bytes> \r\n<value>\r\n

e.g

add hahwul_data 0 900 5

12345
이런식으로 데이터가 들어갔다면.. hahwul_data 라는 키를 생성하고, 5byte에 12345를 저장합니다.

Delete to key/value

delete <key> [<time>] \r\n


Quit

처음에 아무생각없이.. Ctrl+C, D를 연타했었네요. quit 로 명령쉘 탈출이 가능합니다.

quit

Other command

set
add
get
delete
replace
prepend
flush_all
incr
decr
stats
 - stats slabs
 - stats items
 - stats malloc
 - stats detail
 - stats size
 - stats reset
version
quit

주요한건 요정도가 있고.. 자세한건 위키 문서 참고하심이 좋을 듯 싶네요.
http://zetawiki.com/wiki/Memcached_%EB%AA%85%EB%A0%B9%EC%96%B4

Reference

https://en.wikipedia.org/wiki/Memcached
https://blog.elijaa.org/2010/05/21/memcached-telnet-command-summary/
http://zetawiki.com/wiki/Memcached_%EB%AA%85%EB%A0%B9%EC%96%B4

댓글 없음:

댓글 쓰기