[DEBIAN] Intro Memcahed and Accessing Memcached from the command line

최근에 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