# 여러개의 서버에서 이전에 계산된 값을 메모리에 저장하여 매번 계산하지 않게하는 원격 분산 캐시 시스템
# 주로 데이터 베이스의 부하를 줄이기 위해 사용
# LiveJournal, Wikipedia, Flickr, Twitter, Youtube 등에서 사용
# 내부 구성
# libevent(network library) : 코어부분으로 프로토콜 처리
# 해시테이블 : 요청 유형에 따라 데이터 처리(키-값 쌍으로 기록)하고 통계 정보 기록
# Memcached 클라이언트 라이브러리
# Memcached 서버가 아닌 클라이언트 라이브러리에서 분산 처리 담당
# Memcached 클라이언트 라이브러리의 옵션으로 분산 구성을 설정하면 클라이언트 라이브러리에서 데이터를 여러대의 원격 Memcached 서버로 분배
# Memcached 클라이언트 라이브러리 : libmemcached(C/C++), spymemcached(Java) 2.5 이상
# libmemcahed, spymemcached 등을 이용하여 분산 처리 가능
# memcached 와 libmemcached 를 묶어 MemBase 솔루션 제공
# 설치
# 먼저 libevent 설치
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
tar zxvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure
make && make install
ls -ahl /usr/local/lib/libevent
# memcached
wget https://memcached.org/files/memcached-1.5.14.tar.gz
tar zxvf memcached-1.5.14.tar.gz
cd memcached-1.5.14
./configure --with-libevent=/usr/local/lib/libevent --enable-64bit
make && make install
ls -ahl /usr/local/bin/memcached
# memcached 가 실행 안되면 다음 동적라이브러리 설정파일에 libevent 경로 명시
vi /etc/ld.so.conf.d/libevent-i386.conf
/usr/local/lib/
# 분산 환경을 구축하기 위해서 memcached 클라이언트 라이브러리 사용
# libmemcached
wget http://launchpad.net/libmemcached/1.0/0.44/+download/libmemcached-0.44.tar.gz
# spymemcached
wget http://spymemcached.googlecode.com/files/memcached-2.5-23-g9d5d462-sources.zip
# 예제
# memcached 서버 가동
# 포트 : 11211(디폴트), 메모리(MB단위) : 2GiB, 쓰레드 : 6개, 최대 동시 접속 1024개, 데몬으로 수행(옵션없으면 일반 프로세스로 수행)
memcached -p 11211 -m 2048 -c 1024 -t 6 -d
# telnet 으로 memcached 에 접속해서 상태 확인
# 종료는 ctrl+] 입력후 quit
telnet localhost 11211
Connected to ysoftman-memcache
Escape character is '^]'.
stats
# telnet 이용해서 데이터 저장 및 조회
# key : 키 ysoftmankey
# flag : 사용자 플래그 0
# exptime : 만료시간 60초
# bytes : 데이터의 길이 14
# 데이터 길이가 실제 데이터보다 짝으면 에러 발생
# 데이터 길이가 실제 데이터보다 크면 데이터 길이까지 입력(엔터)해야 함
set ysoftmankey 0 60 14 입력후 엔터
YoonByoungHoon
# 조회
# 60초가 지나면 데이터는 사라져 조회되지 않는다.
get ysoftmankey
# 키값을 모르는 경우, active slabs(데이터가 들어있는 공간) 조회
# stats items 로 조회해도 된다.
stats slabs
# 위 결과 slab(item), dump할 데이터 개수
stats cachedump 1 100
# 덤프 결과 예시
# ysoftmankey : 키값
# 1 b: 키에 저장된 값 크기 1byte
# 1350000000 s : 저장시 타임스탬프
ITEM ysoftmankey [1 b; 1350000000 s]
# 참고로 캐시키 조회 ruby script
https://gist.github.com/bkimble/1365005# nc(netcat) 로 접속 및 명령을 바로 실행할 수도 있다.
# 상태확인
echo -e "stats" | nc localhost 11211
# 저장된 데이터 개수
echo -e "stats items" | nc localhost 11211
# \r\n데이터\r 으로 이스케이프해야 한다.
# 저장
echo -e "set ysoftman1 0 30 8\r\nysoftman\r" | nc localhost 11211
# 조회
echo -e "get ysoftman1\r" | nc localhost 11211
# 전체 삭제
echo -e "flush_all" | nc localhost 11211
# memcached 데몬 종료
killall memcached
# 커맨드 참고
https://github.com/memcached/memcached/wiki/Commands