최근에 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 \r\n\r\n set \r\n\r\n

e.g


add hahwul_data 0 900 5

12345

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

Delete to key/value

delete [

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